源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

stl容器set,map,vector之erase用法与返回值详细解析

  • 时间:2020-07-15 13:52 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:stl容器set,map,vector之erase用法与返回值详细解析
总结本人在工作中经验教训。 在使用 list、set 或 map遍历删除某些元素时可以这样使用: [b]正确使用方法1 [/b]
[u]复制代码[/u] 代码如下:
      std::list< int> List;       std::list< int>::iterator itList;       for( itList = List.begin(); itList != List.end(); )       {             if( WillDelete( *itList) )             {                itList = List.erase( itList);             }             else                itList++;       }
[b]正确使用方法2[/b] 
[u]复制代码[/u] 代码如下:
    std::list< int> List;       std::list< int>::iterator itList;       for( itList = List.begin(); itList != List.end(); )       {             if( WillDelete( *itList) )             {                List.erase(itList++);             }             else                itList++;       }
[b]正确使用方法3 [/b]
[u]复制代码[/u] 代码如下:
      std::list< int> List;       std::list< int>::iterator it, next;       for( it = List.begin(), next = it, next ++; it != List.end(); it = next, ++next)       {             if( WillDelete( *it) )             {                List.erase(it);             }       }
注:方法三更为巧妙,但需注意方法三是用前需要判断容器是否为空,否则迭代器会出问题。 我测试得出,set.erase 不返回迭代器,list返回。 vector  删除操作
[u]复制代码[/u] 代码如下:
std::vector <PACK_PRINT>::iterator It ; for(It=printItems.begin();It!=printItems.end();) {   //我是说这里怎么判断printItems printItems 里PACK_PRINT.bh =0   if( It.bh ==0) //是这样吗?   {//删除        It=printItems.erase(It);   }   else   {//不删除        ++It;   } }
[u]复制代码[/u] 代码如下:
std::vector <PACK_PRINT> printItems; int i = 0; while(i < printItems.size()) {           if(printItems[i].bh == 0)  //这里比如我想把 printItems 时PACK_PRINT.bh =0 的删除如何写哟。另外这样删除有错吗?           {//删除                 printItems.erase(printItems.begin() + i);           }           else           {//不删除                 ++i;           } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部