はい、イテレータが無効にvectorされていない限り、要素への「参照」を保持できます。vectorそれは大きな警告です。
のvectorイテレータは、vectorが再割り当てされると無効になります。これは、に要素を追加するたびに発生する可能性がありますvector。さらに、eraseからアイテムをvector取得すると、削除ポイント以降のすべてのイテレータが無効になります。
これはすべて非常に複雑で、心配する必要はありません。イテレータが無効にならないようにする必要がある場合(そのアイテム自体を削除しない限り)、avectorは使用に最適なコレクションではない可能性があります。代わりに、、、、またはその他のコレクションをlist検討することもできます。mapそれぞれに独自のトレードオフのセットがあることに注意してください。
ただし、イテレータについてはまったく気にする必要がない場合があります。vectorアイテム自体ではなく、アイテムへのポインターを格納した場合、ベクトルが再割り当てされても、ポインターが指すものは移動しません。もちろん、このルートを進むには、可能であればスマートポインタを使用する必要があります。一見すると、最高のものはであるように見えますshared_ptr。したがって、あなたのデルカレーションは次のようになります。
std::vector<shared_ptr<LargeClass>>
最後に、本当にaを使用する必要がありvector、スマートポインターをいじりたくない場合は、内のアイテムへの「参照」vectorではなく、それらのインデックス位置を追跡することをお勧めします。でアイテムを追跡したいとしますvecLargeClass[3]。イテレータを無効にするために何かを行ったとしても、問題のアイテムは引き続きインデックスにあります3。interatorsや物事へのポインタを追跡する代わりに、それらがのどこにあるかを追跡しvectorます。