我想弄清楚如何std::multimap
迭代器的工作,因此我創建了一個簡單的例子,顯示我的問題的實質。如果取消註釋情況1,我希望迭代器指向第一個具有鍵1的元素,但實際上它會打印與鍵0相關的所有值(如沒有被擦除),並且有時會崩潰,可能是因爲迭代器無效。但是,如果取消註釋情況2,則鍵1的所有值都將被正確刪除。C++多圖迭代器失效
是否有任何方法可以在擦除後知道multimap
的下一個有效迭代器? (例如std::vector.erase(...)
回報之一)
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 2011-12-23 07:27:52
雖然它真的很重要嗎?它完成同樣的事情,我95%確定它會編譯成相同的代碼。 – 2011-12-23 07:31:42
@curiousguy因爲我喜歡寫(* it).first。 – givi 2011-12-23 07:31:54