zoukankan      html  css  js  c++  java
  • [STL] 注意erase() 和remove()

    首先要理解STL中的两大类容器:

      链表容器:包括list、slist等这样基于节点的容器(动态分配内存块)和set、map、multiset、multimap等关联容器(平衡树实现)

      数组容器:指的是在一块连续的内存上保存元素的连续内存容器,比如vector、deque、string

    erase()方法: 

      iterator erase(iterator _Where);  //从指定容器删除指定位置的元素,返回值是一个迭代器,指向删除元素下一个元素

      iterator erase(iterator _First,iterator _Last);  //从指定容器删除某段范围内的元素,返回值也表示一个迭代器,指向最后一个删除元素的下一个元素;

    正确使用erase()的方式一:

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

    正确使用erase()的方式二:

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

      对于链表容器两种方式都可以,但是对于数组容器只能使用第一种方式,因为数组容器的erase()方法的实现会将后面的元素都逐个往前复制移动

  • 相关阅读:
    系统综合实践第三次实践
    系统综合实践第二次实践作业
    第1次实践作业
    软工总结
    团队Beta演示
    团队Beta5
    软工实践个人总结
    第09组 Beta版本演示
    第09组 Beta冲刺(5/5)
    第09组 Beta冲刺(4/5)
  • 原文地址:https://www.cnblogs.com/lihuixian001/p/2765296.html
Copyright © 2011-2022 走看看