Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 二维矢量下标超出范围,即使下标在范围内_C++_2d Vector - Fatal编程技术网

C++ 二维矢量下标超出范围,即使下标在范围内

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;

因此,我试图编写一个简单的代码,从用户那里接收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;
    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