所以我正在尝试编写一个简单的代码,它将从用户那里接收 2 个字符串。然后它使用 length() 获取字符串的长度,并根据长度创建一个整数矩阵(二维 vector )。然后我需要将最后一行和最后一列的值设置为 2 的幂值。 如果输入的字符串是“happy”和“sad”,则结果矩阵应该是:
0 0 0 0 0 6
0 0 0 0 0 4
0 0 0 0 0 2
10 8 6 4 2 0
我正在生成这样的矩阵:
vector<vector<int>> opt;
unsigned int x, y;
x = (sequenceOne.length()) + 1;
y = (sequenceTwo.length()) + 1;
unsigned int p,q;
opt.resize(y, vector<int>(x, 0)); // resizes the matrix
当我尝试更改矩阵中的值时:
opt[2][2] = 5;
它工作正常,但是当我像这样访问最后一行最后一列时:
opt[x][y]
它告诉我“表达式: vector 下标超出范围” 我认为这与将字符串的长度用作值有关,但我终究无法弄清楚为什么这会导致问题。 我试过使下标不同的变量、不同的顺序以及诸如 opt[x-1][y-1] 之类的东西,但仍然出现错误。
我不确定这是否重要,但我使用的是 MS VS2012。
最佳答案
数组是 0 索引的。 x
和 y
是数组的大小。您不能将大小值用作索引值。
例如:
a
的大小为 5。"a"
位于索引 0,"e"
位于索引 4。"e"
是列表中的第 5 个元素。当您尝试使用 5 的大小作为索引时,正如您所见,索引 5 处没有元素。最后一个元素将被访问 a[size - 1]
。请记住,大小为 0 会导致索引为 -1,这是一个无效索引。
关于c++ - 即使下标在范围内,二维 vector 下标也会超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21869666/