zoukankan      html  css  js  c++  java
  • c++ list erase()

    STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在使用erase方法来删除元素时,需要注意一些问题。
          在使用 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++;
          }

    下面是两个错误的使用方法:

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

          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++;
          }
      正确使用方法1:通过erase方法的返回值来获取下一个元素的位置
          正确使用方法2:在调用erase方法之前先使用 “++”来获取下一个元素的位置
          错误使用方法1:在调用erase方法之后使用“++”来获取下一个元素的位置,由于在调用erase方法以后,该元素的位置已经被删除,如果在根据这个旧的位置来获取下一个位置,则会出现异常。
          错误使用方法2:同上。

          这里“++”运算符与我们平常的理解刚好相反,erase( itList++) 是先获取下一个元素的位置在删除; erase( ++itList) 是删除以后再获取下一个元素的位置。

  • 相关阅读:
    阿里P8架构师谈:阿里双11秒杀系统如何设计?
    秒杀系统设计的知识点
    秒杀系统架构优化思路
    秒杀系统解决方案
    Entity Framework Code First (七)空间数据类型 Spatial Data Types
    Entity Framework Code First (六)存储过程
    Entity Framework Code First (五)Fluent API
    Entity Framework Code First (四)Fluent API
    Entity Framework Code First (三)Data Annotations
    Entity Framework Code First (二)Custom Conventions
  • 原文地址:https://www.cnblogs.com/yelongsan/p/4050404.html
Copyright © 2011-2022 走看看