目前在我的函数中,我有一个声明2d向量的方法。
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);
}
}
}
例如,当我试图运行该函数时,路径(10,10)。
double for循环可以完美地运行而没有任何错误,但是如果我改变路径,例如路径(11,10)或路径(11,13)或两者都不相同的数字(int x和y ),将出现错误向量下标超出范围。
为什么会这样?谁可以帮我这个事?有没有办法解决它,以便我输入的任何值都可以接受?谢谢。
答案 0 :(得分:3)
mazeArray[b][a].setX(b);
在此声明中,b可以在[0,row-1]之间变化,而mazeArray的尺寸为column
* row
。所以第一个索引只能有[0,column-1]的值。所以很可能,你需要像这样初始化矢量 - :
vector <vector<test>> mazeArray(row, vector<test>(column)); //Declaring an object
答案 1 :(得分:2)
函数中的循环
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);
}
}
}
考虑到函数参数的含义不清楚,因为它们没有被使用。:)