1

イテレータを使用してベクター内のアイテムを表示する際に問題が発生しているようです。おそらく、私はそれを見るために別の目が必要です。

vector<string> tempVector;
vector<string>::iterator it;


it = tempVector.begin();
tempVector.push_back("1");
cout << *it;

これが完全なコードではないことは知っていますが、実行されているのはこの部分だけです。出力はセグメンテーション違反です。イテレータはベクトルの先頭を指していませんか?私は「1」をカウトすることを期待していました。

4

1 に答える 1

5

の呼び出しvector::reserve()は、再割り当てが必要な場合に、既存のすべてのイテレータを無効にします。

C ++標準を引用するには、23.3.6.3 [vector.capacity]

現在の容量がreserve()の引数よりも小さい場合にのみ、この時点で再割り当てが発生します。[...]再割り当ては、シーケンス内の要素を参照しているすべての参照、ポインター、およびイテレーターを無効にします。

編集:編集後、への呼び出しがありますvector::push_back()。これにより、再割り当てが必要な場合はすべてのイテレータも無効になります。イテレータ無効化ルールが役立つ場合があります。

于 2012-09-20T02:38:21.280 に答える