2D矢量标外出的范围即使当标在范围内(2d vector subscripts going out

2019-10-19 09:12发布

所以我想写一个简单的代码,将采取从用户的2串。 然后它以串的使用长度()的长度,并创建基于所述长度整数的矩阵(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]

它告诉我“表达:向量下标越界”我认为这是与该得到的字符串作为值使用的长度,但我不能为我的生命弄清楚为什么会引起问题。 我试图使像标选择[X-1]不同的变量,不同的顺序,和东西[Y-1],但仍然出现错误。

我不知道,如果它的问题,但我使用MS VS2012。

Answer 1:

数组索引0。 xy是数组的大小。 您不能使用的大小值作为指标值。

例如:

a是大小5的"a"在索引0处, "e"是在索引4 "e"是在列表中的第五元素。 当您尝试使用的5大小为指标,以及存在于索引5没有元素,你可以看到。 的最后一个元素将被访问的a[size - 1] 虽然记住,0的结果在大小的索引-1,这是一个无效索引。



Answer 2:

C ++数组的工作是这样的:

vector<int> v = {2, 4, 6, 8}
//index:         0  1  2  3

因此,阵列中的最后一个元素实际上是opt[x - 1][y - 1]



文章来源: 2d vector subscripts going out of range even when the subscripts are in range
标签: c++ 2d-vector