zoukankan      html  css  js  c++  java
  • 迭代器失效

    void vectorTest()
    {
        vector<int> container;
        for (int i = 0; i < 10; i++)
        {
            container.push_back(i);
        }

        vector<int>::iterator iter;
         for (iter = container.begin(); iter != container.end(); iter++)
        {
                if (*iter > 3)
                  container.erase(iter);
        }

         for (iter = container.begin(); iter != container.end(); iter++)
        {
                cout<<*iter<<endl;
        }
    }

    测试结果如下:

    对于序列式容器,比如vector,删除当前的iterator会使后面所有元素的iterator都失效。这是因为顺序容器内存是连续分配,删除 一个元素导致后面所有的元素会向前移动一个位置。但是erase方法可以返回下一个有效的iterator。所以代码做如下修改,就OK了。

    void vectorTest()
    {
        vector<int> container;
        for (int i = 0; i < 10; i++)
        {
            container.push_back(i);
        }

        vector<int>::iterator iter;
        for (iter = container.begin(); iter != container.end(); )
        {
                if (*iter > 3)
                  iter = container.erase(iter);    //erase的返回值是删除元素下一个元素的迭代器
                else{
                    iter++;
                }
        }

         for (iter = container.begin(); iter != container.end(); iter++)
        {
                cout<<*iter<<endl;
        }
    }

     

    111
  • 相关阅读:
    关于 android studio 3.2打开后一直下载中,最后还失败了 的解决方法
    Android app退出(AppManager对Activity的管理)
    关于 android studio 找错
    webpack3 版本问题
    phpstorm中webpack快速执行脚本转换scss至css
    v-bind:class失效问题
    php(2)—基础补充
    phpstorm配置Apache服务器
    php(1)—基础
    中醫學習
  • 原文地址:https://www.cnblogs.com/zwj-199306231519/p/9671835.html
Copyright © 2011-2022 走看看