Я пытаюсь работать с векторами векторов целых для решения головоломки Судоку, которое я пишу.
Вопрос 1:
Если я собираюсь получить доступ к своему 2-мерному вектору по индексу, я должен сначала инициализировать его с соответствующим размером?
Например:
typedef vector<vector<int> > array2d_t;
void readAPuzzle(array2d_t grid)
{
for(int i = 0; i < 9; i++)
for(int j = 0; j < 9; j++)
cin >> grid[i][j];
return;
}
int main()
{
array2d_t grid;
readAPuzzle(grid);
}
будет вызывать ошибку. Я предполагаю, что это потому, что он пытается получить доступ к элементам сетки, которые еще не были инициализированы?
Я поменял строку объявления сетки на:
array2d_t grid(9, vector<int>(9, 0));
И это, кажется, избавляет от этой ошибки сегмента. Это правильный способ справиться с этим?
Вопрос 2:
Почему, когда я пытаюсь прочитать в своей сетке из cin, а затем распечатать сетку, сетка остается пустой?
Для этого я использую следующий код:
void printGrid(array2d_t grid)
{
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
cout << grid[i][j] + " ";
}
cout << endl;
}
}
void readAPuzzle(array2d_t grid)
{
for(int i = 0; i < 9; i++)
for(int j = 0; j < 9; j++)
cin >> grid[i][j];
return;
}
int main()
{
array2d_t grid(9, vector<int>(9, 0));
printGrid(grid);
readAPuzzle(grid);
printGrid(grid);
}
И я пытаюсь запустить мою программу, как:
./a.out < sudoku-test
Где sudoku-test - это файл, содержащий следующее:
3 0 0 0 0 0 0 0 0
5 8 4 0 0 2 0 3 0
0 6 0 8 3 0 0 7 5
0 4 1 0 0 6 0 0 0
7 9 0 0 2 0 0 5 1
0 0 0 9 0 0 6 8 0
9 3 0 0 1 5 0 4 0
0 2 0 4 0 0 5 1 8
0 0 0 0 0 0 0 0 6
Первый вызов printGrid () дает пустую сетку, когда вместо этого я должен видеть сетку 9x9 с 0, поскольку именно так я ее инициализировал. Второй вызов должен содержать сетку выше. Однако оба раза оно пустое.
Может кто-нибудь пролить свет на это?