C++ STL移除容器元素的方法总结

来源:互联网 发布:linux ffmpeg x264 编辑:程序博客网 时间:2024/05/06 21:49

删除后的元素对应的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;
 }
}


0 0