私はイテレータがどのように動作するのか把握しようとしています。したがって、問題の実体を示す簡単な例を作成しました。ケース1のコメントを外すと、イテレータがキー1を持つ最初の要素を指し示すことが期待されますが、実際にはキー0に関連するすべての値が出力されます(何も消去されていない)ので、場合によってはイテレータが無効であるためクラッシュすることがあります。ただし、ケース2のコメントを外すと、キー1のすべての値が適切に削除されます。C++マルチマップイテレータの無効化
消去後にmultimap
の次に有効なイテレータが何であるかを知る方法はありますか? (例えばstd::vector.erase(...)
リターン1)
std::multimap<int, int> m;
for(int j=0; j<3; ++j) {
for(int i=0; i<5; ++i) {
m.insert(std::make_pair(j, i));
}
}
for(std::multimap<int, int>::iterator it=m.begin(); it!=m.end();) {
printf("%d %d\n", (*it).first, (*it).second);
++it;
if((*it).second == 3) {
//m.erase(0); //case 1
m.erase(1); //case 2
}
}
「 '(* it).first'」なぜ「it-> first'? – curiousguy
それは本当に重要ですか?それは同じことを達成し、私は同じコードをコンパイルすることを95%確信しています。 –
@curiousguy原因私は(* it).firstを書いています。 – givi