zoukankan      html  css  js  c++  java
  • C++ STL 中erase()的使用需要小心

    C++ STL极大的方便了用户编写程序,但是同时一不小心也会犯一些错误,如erase()造成迭代器失效经常会引起错误。

    错误示例:

          std::list< int> List;
          std::list< int>::iterator it;
          for( it = List.begin(); it != List.end(); it++)
          {
                if( it符合删除条件 )
                {
                   List.erase( it);
                }
          }

    由于erase()之后对应位置的迭代器已经失效,这时itList++将无法找到下一个元素。

    正确的使用方式是利用erase()的返回值为下一个有效的迭代器或者在调用erase()之前先找到下一个有效的迭代器

    正确示例:

         std::list< int> List;
          std::list< int>::iterator it;
          for( it = List.begin(); it != List.end(); )
          {
                if( it符合删除条件 )
                {
                   it = List.erase(it);
                }
                else
                   it++;
          }

    或者

          std::list< int> List;
          std::list< int>::iterator it;
          for( it = List.begin(); it != List.end(); )
          {
                if( it符合删除条件 )
                {
                   List.erase( it++);
                }
                else
                   it++;
          }
  • 相关阅读:
    mv 命令 简要
    mv 命令
    rmdir 命令
    rm 命令简要
    rm 命令
    mkdir 命令
    pwd 命令
    远程工具(SSH Secure)连接Centos出现中文乱码问题的解决办法
    (4)剑指Offer之链表相关编程题
    (4)剑指Offer之链表相关编程题
  • 原文地址:https://www.cnblogs.com/bewolf/p/5128559.html
Copyright © 2011-2022 走看看