我正在尝试使用我正在编写的数独拼图解算器的向量向量.
问题1:
如果我要通过索引访问我的2d向量,我是否必须先用适当的大小初始化它?
例如:
typedef vector > 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);
}
将seg故障.我认为这是因为它试图访问尚未初始化的网格元素?
我换了网格的声明行:
array2d_t grid(9, vector(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(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()会给出一个空白网格,相反,我应该看到一个0x的9×9网格,因为这是我初始化它的方式.第二个调用应该包含上面的网格.但是,两次都是空白.
任何人都可以对此有所了解吗?