繁体   English   中英

如何在C ++中使用嵌套向量?

[英]How do I work with nested vectors in C++?

我正在尝试使用我正在编写的数独拼图解算器的向量向量。

问题1:

如果我要通过索引访问我的2d向量,我是否必须先用适当的大小初始化它?

例如:

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);
}

将seg故障。 我认为这是因为它试图访问尚未初始化的网格元素?

我换了网格的声明行:

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()会给出一个空白网格,相反,我应该看到一个0x的9x9网格,因为这是我初始化它的方式。 第二个调用应该包含上面的网格。 但是,两次都是空白。

任何人都可以对此有所了解吗?

Q1:是的,这是处理它的正确方法。 但是,请注意嵌套向量是实现2D数组的一种相当低效的方法。 一个向量和x + y * width计算指数通常是更好的选择。

Q2A:计算grid[i][j] + " "不会连接两个字符串(因为左边是int,而不是字符串),而是将数值添加到指针(第一个字符的内存地址)字符串“”)。 请改用cout << grid[i][j] << " "

Q2B:您正在为readAPuzzle传递数值(它被复制)。 该函数读入其本地副本,该函数在函数返回时被销毁。 通过引用传递(这避免了复制并使用原始版本):

void readAPuzzle(array2d_t& grid)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM