У меня проблемы с доступом к определенному элементу 2D-вектора.
У меня есть функция, которая инициализирует вектор bool размером 25x25 как true. Он передается в функцию с именем release_balls по ссылке. Вот код того, как каждый элемент был инициализирован:
for (int i = 0; i < 25; i++) //a nested for loop fills a 2D vector
{
vector<bool> temp; //temp represents the rows of the vector, which pushed in create a 2D matrix
for (int j = 0; j < 25; j++)
{
temp.push_back(b);
}
traps.push_back(temp); //push in rows to create 2D matrix
}
Однако я не могу получить доступ к конкретному элементу 2D-массива. Я сделал это, прежде чем использовать метод использования вектора [2] [3]. Когда я делаю это в этой программе, это дает мне ошибку сегментации (ядро сброшено), как будто я обращаюсь к части вектора, которая не была инициализирована. Как я уже сказал, я могу перебирать вектор в этой функции и распечатывать все просто отлично. Вот функция. Он успешно выполняет cout, а затем вызывает ошибку seg в строке cout << traps [1] [1]; </p>
unsigned release_balls(vector < vector < bool>>& traps, vector < unsigned >& ballCycles)
{
int high = MAX_CYCLES;
int low = MIN_CYCLES;
unsigned numberOfBalls = 0;
cout << "cout all elements, iterating thru" << endl;
for (unsigned i = 0; i < traps.size(); i++)
{
for (unsigned j = 0; j < traps[i].size(); j++)
{
cout << traps[i][j];
}
}
cout << "cout random access element of the vector traps. " << endl;
cout << traps[1][1];
cout << "Before for loop" << endl;
for (unsigned i = 0; i < ballCycles.size(); i++)
{
if (ballCycles[i] > 0)
{
ballCycles[i]--;
if (ballCycles[i] == 0) //If the element in ball cycle is 0 that means it has come back down and landed on a trap.
{
unsigned row = rand() % GRID_SIZE;
unsigned col = rand() % GRID_SIZE;
cout << "the first if satement is being executed in release_balls" << endl;
cout << "randomly generated row is: " << row << endl;
cout << "Randomly gen column is: " << col << endl;
cout << "traps[rows][col] is :" << traps[row][col];
cout << "hi " << endl;
if (traps[row][col] == 1) //if the trap has not yet been sprung
{
cout << "if traps[row][col] == 1" << endl;
traps[row][col] = 0;
unsigned b1 = rand() % (high - low + 1) + low; //ball 1 is randomly assigned a number of cycles
unsigned b2 = rand() % (high - low + 1) + low; //ball 2 is randomly assigned a number of cycles
ballCycles.push_back(b1);
ballCycles.push_back(b2);
for (unsigned int i = 0; i < ballCycles.size(); i++)
{
cout << ballCycles[i] << ' ';
}
cout << endl;
}
}
}
for (unsigned i = 0; i < ballCycles.size(); i++)
{
if (ballCycles[i] != 0) //loop over vector and count the number of balls in air during this particular cycle
{
numberOfBalls++;
}
}
}
return numberOfBalls;
}
Кроме того, я знаю, что двумерный вектор bools является плохой формой в C ++ 11, но этопредназначен для класса программирования, и назначение специально говорит, чтобы использовать это.