C++ 2d 矢量下标超出范围错误

C++ 2d Vector subscript out of range error

本文关键字:范围 错误 下标 2d C++      更新时间:2023-10-16

目前在我的函数中,我有一个声明二维向量的方法。

vector <vector<test> > path(int x, int y) //Path function
{
vector <vector<test>> mazeArray(column, vector<test>(row)); //Declaring an object
    for (int a = 0; a < column; a++)
    {
        for (int b = 0; b < row; b++)
        {
            mazeArray[b][a].setX(b);
            mazeArray[b][a].setY(a);
        }
    }
}

例如,当我尝试运行函数时,path(10,10)。

双精度 for 循环完美运行,没有任何错误,但是如果我更改路径,例如路径 (11,10) 或路径 (11,13) 或两者(int x 和 y)的数字,则会出现超出范围的误差向量下标

为什么会这样?谁能帮我解决这个问题?有没有办法修复它,以便我可以接受我键入的任何值?谢谢。

mazeArray[b][a].setX(b); 

在此语句中,b 可以从 [0,row-1] 变化,而 mazeArray 的维度column * row 。因此,第一个索引只能具有 [0,列-1] 中的值。所以最有可能的是,你需要像这样初始化向量 -:

vector <vector<test>> mazeArray(row, vector<test>(column)); //Declaring an object

函数中的循环

vector <vector<test> > path(int x, int y) //Path function
{
vector <vector<test>> mazeArray(column, vector<test>(row)); //Declaring an object
    for (int a = 0; a < column; a++)
    {
        for (int b = 0; b < row; b++)
        {
            mazeArray[b][a].setX(b);
            mazeArray[b][a].setY(a);
        }
    }
}

是错误的。您必须在索引中交换 b 和 a。应该有

    for (int a = 0; a < column; a++)
    {
        for (int b = 0; b < row; b++)
        {
            mazeArray[a][b].setX(b);
            mazeArray[a][b].setY(a);
        }
    }
}

考虑到函数参数的含义不清楚,因为它们没有被使用:)