0

プログラムを書こうとしていたところ、 で問題が発生しましvectorた。vectorループの繰り返しごとにの値を比較するロジックがあります。そのため、ベクトルを初期化し、各ベクトルに 1 つの要素をプッシュします。これらのベクトルの両方に 1 つの要素があるため、次のコードのように比較して反復できるはずですが、そうではありません。バグがあるかもしれませんが、見つけるのは難しいです。

int M = 3; // I am passing values of M and N to this function
int N = 3; 
std::vector<int> X;
std::vector<int> Y;
X.push_back(1);
Y.push_back(1);
int x = 0;
for(int i = 1; i <= N; i++){
    for(int j = 1; j <= M; j++){
        if((X[x] <= i) && (Y[x] <= j)){
            if (x > 0){
                X.push_back(i);
                Y.push_back(j);
                x = x + 1;
            }
            else{
                X[0] = 1;
                Y[0] = 1;
                x = x + 1;
            }
        }
    }
}
for(int i = 0; i < X.size(); i++){
    cout << X[i] << "; " << Y[i] << endl;
}

上記のプログラムで次の出力が得られます。

`1; 1`

しかし、私はこれを生産する必要があります。

`1; 1`
`1; 2`
`2; 2`
4

1 に答える 1

8

未定義の動作があります。

がゼロの場合x、ベクトルに新しいエントリをプッシュしませんが、増加xし、アクセスする次の反復は範囲外にX[1]なりY[1]ます。

于 2013-03-23T10:19:42.227 に答える