所以我试着编写一个简单的代码,它将从用户那里获取2个字符串。然后使用length()获取字符串的长度,并根据长度创建一个int的矩阵(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;
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]
它告诉我“表达式:向量下标超出范围” 我认为它与获取字符串的长度作为值有关,但我不能为我的生活弄清楚为什么会导致问题。 我已经尝试使下标包含不同的变量,不同的顺序以及opt [x-1] [y-1]之类的内容,但错误仍然存在。
我不确定这是否重要,但我使用的是MS VS2012。
答案 0 :(得分:1)
数组为0索引。 x
和y
是数组的大小。您不能将大小值用作索引值。
例如:
a
的大小为5. "a"
位于索引0处,"e"
位于索引4处。"e"
是列表中的第5个元素。当您尝试使用5的大小作为索引时,索引5处没有元素,如您所见。将访问最后一个元素a[size - 1]
。虽然记住,大小为0会导致索引为-1,这是一个无效的索引。
答案 1 :(得分:0)
C ++数组的工作原理如下:
vector<int> v = {2, 4, 6, 8}
//index: 0 1 2 3
因此,数组中的最后一个元素实际上是opt[x - 1][y - 1]
。