1

そのため、ユーザーから 2 つの文字列を受け取る簡単なコードを作成しようとしています。次に、length() を使用して文字列の長さを取得し、長さに基づいて int の行列 (2 次元ベクトル) を作成します。次に、最後の行と最後の列の値を 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

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 に答える