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
  • 相关阅读:
    js设计模式-迭代器模式
    js设计模式-代理模式
    js设计模式-策略模式
    js设计模式-单例模式
    js设计模式中的高阶函数的一些应用
    深入react技术栈记录(二)
    深入react技术栈记录(一)
    响应式开发(1)
    Angular Js 与bootstrap, angular 与 vue.js
    for in 中的index
  • 原文地址:https://www.cnblogs.com/zwj-199306231519/p/9671835.html
Copyright © 2011-2022 走看看