我想弄清楚如何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