要素を挿入および/または消去すると、既存の要素へのイテレータが無効になる可能性はありますか?
ありがとうございました。
はい。状態のドキュメント:boost::ptr_vector<T>
A
ptr_vector<T>
は、基になる を使用してポインターを格納するポインター コンテナーですstd::vector<void*>
。
また、要素を に挿入したり削除したりするstd::vector
と、再割り当てが発生し、既存の反復子が無効になる可能性があります。
具体的には、C++11 の §23.3.6.5/3 は次のように述べていerase()
ます。
(3) 効果: 消去のポイント以降の反復子と参照を無効にします。
insert()
とについてpush_back()
:
(1) 備考: 新しいサイズが古い容量より大きい場合、再割り当てが発生します。再割り当てが発生しない場合、挿入ポイントの前のすべての反復子と参照は有効なままです。
したがって、要素の挿入時に反復子が無効にならないようにするには、このreserve()
関数を使用して、ベクターから反復子を取得する前にベクターの容量を増やすことができます。size()
これらの反復子は、ベクトルの が予約された要素の数を超えるまで有効なままになります。