2つのコンテナの値を入れ替えると、イテレータが無効にならないと言われています。一時的なコンテナでスワップした後にイテレータが無効になる
ので、次のコードは、
vector<int> v1;
v1.push_back(1);
vector<int>::iterator i = v1.begin();
vector<int> v2(v1);
v2.swap(v1);
cout<<*i<<endl; //output 1
正常に動作しますが、私はイテレータが無効になり、一時的なコンテナになって、プログラムがクラッシュしたとき。
vector<int> v1;
v1.push_back(1);
vector<int>::iterator i = v1.begin();
vector<int>(v1).swap(v1);
cout<<*i<<endl; //i become invalid and program crashes here
これは愚かな質問かもしれませんが、何が間違っているのか把握できません。
なぜこの質問を閉じる投票がありますか?私には妥当だと思われる。 –
インデックスは、ベース配列に関連しているので、代わりに格納することができます。 – GManNickG