私は、ベクトルから要素を消去するコードを書きましたが、forループでイテレータを使って消去した後、私のプログラムはクラッシュしています。イテレータを介してベクトルに要素を挿入しても、同じ結果になります。ここでは、コードスニペットは次のとおりです。Vectorのイレーズと挿入関数がイテレータを無効にするのはなぜですか?
vector<int>v1;
v1.reserve(8);
v1.push_back(10);
v1.push_back(8);
v1.push_back(12);
v1.push_back(3);
v1.push_back(7);
v1.push_back(5);
v1.push_back(17);
v1.push_back(1);
int x=6;
std::vector<int>::iterator get_it;
get_it = v1.begin();
for(;get_it!= v1.end();get_it++)
{
if(*get_it < x)
{
v1.insert(get_it, 6);
}
}
私はちょうど要素の消去またはVectorコンテナで起こった要素を挿入した後、イテレータを無効の背後にある理由を理解しようとしています。
何か説明してください。
'erase'と' insert'の両方が、イテレーションを続けるのに使うことができる有効なイテレータを返すことに注意してください。 –