我正在尝试使用整数向量的向量来构建我正在编写的数独解谜器。
问题一:
如果我要按索引访问二维向量,是否必须首先使用适当的大小对其进行初始化?
例如:
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() 会给出一个空白网格,而我应该看到一个由 0 组成的 9x9 网格,因为这就是我初始化它的方式。第二个调用应包含上面的网格。然而,两次都是空白。
有人能解释一下吗?