0

次のコード ブロックが「40」を繰り返し出力するのはなぜですか。

vector<Square> array(81);

char c;
int d;

int i = 0;

for(c='A'; c<'J'; c=c+1)
  for(d=1; d<10; d++)
    array.push_back( Square(c, d));

for(int i = 0; i<81; i++)
  cout << array[i].column << array[i].row << endl;
  }

これは A1, A2, A3, .... , I9 と表示されます。

vector<Square> array(81);

char c;
int d;

int i = 0;

for(c='A'; c<'J'; c=c+1)
  for(d=1; d<10; d++)
    array[i++] = ( Square(c, d));

for(i = 0; i<81; i++)
  cout << array[i].column << array[i].row << endl;
} 

押し戻すと、イテレータを介してアクセスする必要があるランダムメモリに入れられますか? ベクトルを調べるときは常にイテレータを使用する方が良いですか?

4

2 に答える 2

8

vector<Square> array(81);81 個の要素を持つベクトルを宣言します。するとpush_back、新しい要素が挿入されます。つまり、使用されるサイズは 82、83、... に増加し、既存の要素は変更されません。

vectorしたがって、最初のスニペットでは、 の前にある要素を出力しますpush_back。2 番目のスニペットは、要素を必要なものに置き換えます。

于 2012-07-02T08:23:56.077 に答える
2

を使用するたびpush_backに、新しい要素が作成され、ベクターの末尾に追加されます。

最初のコード例を適切に動作させたい場合は、ベクトル サイズを設定することを避け、次のように宣言する必要があります。vector<square> array;

于 2012-07-02T08:32:46.120 に答える