当前位置:  编程技术>c/c++/嵌入式

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

    来源: 互联网  发布时间:2014-10-20

    本文导语:  总结本人在工作中经验教训。 在使用 list、set 或 map遍历删除某些元素时可以这样使用: 正确使用方法1 代码如下:      std::list< int> List;      std::list< int>::iterator itList;      for( itList = List.begin(); itList != List.end(); )     ...

总结本人在工作中经验教训。

在使用 list、set 或 map遍历删除某些元素时可以这样使用:

正确使用方法1

代码如下:

      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++;
      }

正确使用方法2 
代码如下:

    std::list< int> List;
      std::list< int>::iterator itList;
      for( itList = List.begin(); itList != List.end(); )
      {
            if( WillDelete( *itList) )
            {
               List.erase(itList++);
            }
            else
               itList++;
      }

正确使用方法3
代码如下:

      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  删除操作

代码如下:

std::vector ::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;
  }
}


代码如下:

std::vector 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;
          }
}

    
 
 

您可能感兴趣的文章:

  • c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例
  • STL list链表的用法详细解析
  • c++ stl容器vector删除(erase),遍历等基本用法介绍及头文件
  • c++ stl栈容器stack的pop(),push()等用法介绍及头文件
  • C++ stl队列Queue用法介绍:删除,插入等操作代码举例
  • C++ STL库中priority_queue介绍,成员函数说明及priority_queue具体用法举例
  • c++ STL List查找遍历及各成员函数用法详细介绍
  • C++ STL MultiSet类成员函数介绍及具体用法示例
  • c++ STL关联式容器Map成员函数介绍及查找(find()),插入(insert()),删除(erase())等操作代码举例
  • 请问STL中的所有容器(map,multimap,list,queue,vector,set,multiset.......)在BOOST中都可以找到么
  • 双向队列Deque 类成员函数列表参考(c++ STL 容器)
  • STL各个容器性能详细比较
  • 过河小兵,求救各位大哥,我想把stl中的map,vector等容器,做成内存共享方式,希望大哥大姐们指点一下
  • 浅析stl序列容器(map和set)的仿函数排序
  • STL常用容器详细解析
  • 深入解析C++ STL中的常用容器
  • 关于STL中list容器的一些总结
  • c++ STL容器总结之:vertor与list的应用
  • 关于STL中的map容器的一些总结
  • 关于STL中set容器的一些总结
  • 关于STL中vector容器的一些总结
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • STl中的排序算法详细解析
  • C++ STL Bitsets构造函数及成员函数解释及代码示例
  • SGI的STL库 SGI STL
  • STL vector+sort排序和multiset/multimap排序比较
  • 在UNIX中可以包含STL算法吗?
  • C++ STL标准模板库类String成员详细列表参考及示例代码
  • linux完全支持C++STL嗎?
  • c++ stl multimap基本操作使用技巧详细介绍
  • 是不是只有C++才可以使用STL?
  • STL 在 UNIX 多线程 中不能用?
  • Linux系统下如何获取STL帮助
  • STL实现 EASTL
  • 在COMPAQ TRUE64 UNIX用C++编程,使用Gcc,支不支持stl?
  • 哪儿能下载aix4.3的c++ stl库
  • 请问在linux下面编程怎样查询stl类的成员函数
  • 关于stl源代码
  • 请问如果要同时使用STL和多线程,会很麻烦么
  • linux下用c语言写的程序,其中可以使用STL模板吗?先谢谢各位
  • 如果是系统里同时存在两个不同的STL库的话会怎样?
  • STL既然是用头文件实现的,为何还需要链接-lstd?
  • uclinux上如何使用标准模板库STL?
  • STL 标准模板库 uSTL


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3