c++ - 即使下标在范围内,二维 vector 下标也会超出范围

标签 c++ 2d-vector

所以我正在尝试编写一个简单的代码,它将从用户那里接收 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 索引的。 xy 是数组的大小。您不能将大小值用作索引值。

例如: enter image description here

a 的大小为 5。"a" 位于索引 0,"e" 位于索引 4。"e" 是列表中的第 5 个元素。当您尝试使用 5 的大小作为索引时,正如您所见,索引 5 处没有元素。最后一个元素将被访问 a[size - 1]。请记住,大小为 0 会导致索引为 -1,这是一个无效索引。

关于c++ - 即使下标在范围内,二维 vector 下标也会超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21869666/

相关文章:

c++ - C++ 对象中的堆栈成员与堆成员

c++ - 在 C++ 中填充二维 vector

c++ - 二维 vector 类型转换

C++ Armadillo : GCC vs VC++2013: Operator () and overloading

c++ - 使用 OpenGL 将实心圆绘制为一个顶点数组?

c++ - 在 C++ 中,这个结构是什么意思 "InterceptionKeyStroke &kstroke = * (InterceptionKeyStroke *) &stroke"?

python - 使用命名(fifo)管道在 python 和 c++ 之间传输数组(图像)

c++ - 如何制作一个 n*n 矩阵的输出文件,通过从用户那里获取 n,成对生成数字?

c++ - 在 C++ 中返回二维 vector 时出现段错误

c++ - 返回二维 vector 的结束索引