C++ 二维矢量下标超出范围,即使下标在范围内
因此,我试图编写一个简单的代码,从用户那里接收2个字符串。然后使用length()获取字符串的长度,并根据长度创建整数矩阵(2d向量)。然后我需要将最后一行和最后一列的值设置为2的幂。 如果输入的字符串为“高兴”和“悲伤”,则生成的矩阵应为:C++ 二维矢量下标超出范围,即使下标在范围内,c++,2d-vector,C++,2d Vector,因此,我试图编写一个简单的代码,从用户那里接收2个字符串。然后使用length()获取字符串的长度,并根据长度创建整数矩阵(2d向量)。然后我需要将最后一行和最后一列的值设置为2的幂。 如果输入的字符串为“高兴”和“悲伤”,则生成的矩阵应为: 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;
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[x][y]
vector<int> v = {2, 4, 6, 8}
//index: 0 1 2 3
它工作正常,但当我访问最后一行最后一列时,如下所示:
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[x][y]
vector<int> v = {2, 4, 6, 8}
//index: 0 1 2 3
它告诉我“表达式:向量下标超出范围”
我认为这和获取字符串的长度作为值有关,但我一辈子都搞不清楚为什么这会引起问题。
我尝试过让下标变成不同的变量、不同的顺序,以及类似opt[x-1][y-1]之类的东西,但是错误仍然发生
我不确定这是否重要,但我使用的是MS VS2012。数组是0索引的
x
和y
是数组的大小。不能将大小值用作索引值
例如:
a
的大小为5<代码>“a”在索引0处,“e”
在索引4处<代码>“e”是列表中的第五个元素。当您尝试使用大小为5的索引时,正如您所看到的,索引5处没有元素。最后一个元素将被访问a[size-1]
。请记住,大小为0会导致索引为-1,这是一个无效的索引 C++数组的工作方式如下:
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[x][y]
vector<int> v = {2, 4, 6, 8}
//index: 0 1 2 3
向量v={2,4,6,8}
//索引:01 2 3
因此,数组中的最后一个元素实际上是
opt[x-1][y-1]
非常感谢。我不知道我怎么会忽视这一点。这解决了问题。不客气!是的,忽略这些事情很容易。现在希望它能坚持下去。:)有时,为了让人们记住一些事情,人们会狠狠地咬一口;P