删除后的元素对应的iterator 就失效了,不可再用,否则导致不可知行为,需要注意!
我总结了3种删除方法: 推荐方法1
1、使用iterator++
map< int, int >::iterator itMap = mapInt.begin();
for ( ; itMap != mapInt.end(); ) {
if ( itMap->second == 2 ) {
// itMap++将使itMap指向下一个元素,但返回原迭代器的副本,所以
// erase()被调用时,itMap不指向将要被删除的元素
mapInt.erase( itMap++ );
}
else {
++itMap;
}
}
2、使用返回值
for(ITER iter=mapInt.begin();iter!=mapInt.end();)
{
if ( itMap->second == 2 ) {
iter=mapTest.erase(iter);
}else {
++iter;
}
}
3、使用tmp变量记录
for(ITER iter=mapInt.begin();iter!=mapInt.end();)
{
if ( itMap->second == 2 ) {
ITER iterTmp = iter+1;
mapTest.erase(iter);
iter = iterTmp;
}else {
++iter;
}
}