1

要素を挿入および/または消去すると、既存の要素へのイテレータが無効になる可能性はありますか?

ありがとうございました。

4

1 に答える 1

4

はい。状態のドキュメント:boost::ptr_vector<T>

Aptr_vector<T>は、基になる を使用してポインターを格納するポインター コンテナーですstd::vector<void*>

また、要素を に挿入したり削除したりするstd::vectorと、再割り当てが発生し、既存の反復子が無効になる可能性があります。

具体的には、C++11 の §23.3.6.5/3 は次のように述べていerase()ます。

(3) 効果: 消去のポイント以降の反復子と参照を無効にします。

insert()とについてpush_back():

(1) 備考: 新しいサイズが古い容量より大きい場合、再割り当てが発生します。再割り当てが発生しない場合、挿入ポイントの前のすべての反復子と参照は有効なままです。

したがって、要素の挿入時に反復子が無効にならないようにするには、このreserve()関数を使用して、ベクターから反復子を取得する前にベクターの容量を増やすことができます。size()これらの反復子は、ベクトルの が予約された要素の数を超えるまで有効なままになります。

于 2013-02-24T11:33:10.723 に答える