1

所以我正在尝试编写一个简单的代码,它将从用户那里接收 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[2][2] = 5;      

它工作正常,但是当我像这样访问最后一行最后一列时:

    opt[x][y]

它告诉我“表达式:向量下标超出范围”我认为这与获取要用作值的字符串的长度有关,但我无法终生弄清楚为什么这会导致问题。我尝试让下标成为不同的变量、不同的顺序以及诸如 opt[x-1][y-1] 之类的东西,但错误仍然存​​在。

我不确定这是否重要,但我使用的是 MS VS2012。

4

2 回答 2

1

数组索引为 0。x并且y是数组的大小。您不能将大小值用作索引值。

例如: 在此处输入图像描述

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

于 2014-02-19T02:23:41.793 回答
0

C++ 数组的工作方式如下:

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

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

于 2014-02-19T02:28:07.440 回答