zoukankan      html  css  js  c++  java
  • STL删除vector或list的方法及注意的问题

    删除vector中的元素

    1.删除指定的所有对象

    STL中remove()只是将待删除元素之后的元素移动到vector的前端,而不是删除。若要真正移除,需要搭配使用erase()。例子:

    vector<int> vecTemp;

        vecTemp.push_back(2);

        vecTemp.push_back(4);

        vecTemp.push_back(2);

        vecTemp.push_back(5);

    //原始元素顺序为2,4,2,5

        remove(vecTemp.begin(),vecTemp.end(),2);

    //remove后的结果为4,5,2,5

    可以看到除了前面的4,5是正确的后面的没有用了

    若真要删除,则:

    vecTemp.erase(remove(vecTemp.begin(),vecTemp.end(),2),vecTemp.end());

    //输出结果为4,5

    2.如果删除一个元素后要进行其它操作,如写日志等,那么就不能用上面的方法,改用循环,但需要注意,erase()之后的迭代器将失效,而erase()的返回值为当前位置的下一个位置,可以利用其返回值。例子:

    vector<int>vecTemp;

        vecTemp.push_back(2);

        vecTemp.push_back(4);

        vecTemp.push_back(2);

        vecTemp.push_back(5);

        vector<int>::iterator i;

        for(i=vecTemp.begin(); i!=vecTemp.end(); )

        {

           if(*i == 2)

           {

               i = vecTemp.erase(i);

           }

           else

           {

               ++i;

           }

        }

    下面的循环是不对的,运行时会出错

    vector<int>::iteratori;

        for(i=vecTemp.begin(); i!=vecTemp.end(); ++i)

        {

           if(*i == 2)

           {

               vecTemp.erase(i);//执行完后i已经失效

           }

        }

    删除list中的元素

    1.删除所有指定的对象

    list<int> listTemp;

        listTemp.push_back(2);

        listTemp.push_back(4);

        listTemp.push_back(2);

        listTemp.push_back(6);

        listTemp.push_back(5);

        listTemp.remove(2);

    2.删除每个元素后,进行其他操作如写日志,输出等,上面的就不能满足要求,需要采用循环,但要注意erase()后迭代器失效的问题,与vector删除时一样。

    例子:


     

        list<int> listTemp;

        listTemp.push_back(2);

        listTemp.push_back(4);

        listTemp.push_back(2);

        listTemp.push_back(6);

        listTemp.push_back(5);

       list< int>::iterator k;

        for(k=listTemp.begin(); k!=listTemp.end(); )

        {

           if(*k == 2)

           {

               cout<<"删除一个元素"<<endl;

               k = listTemp.erase(k);

           }

           else

           {

               ++k;

           }

        }

  • 相关阅读:
    iphone开发之绘制地图线路
    (ios开发)在MapKit地图上添加注释
    IOS开发地图 (mapkit)实验
    iOS开发之在地图上绘制出你运行的轨迹
    iOS开发之在地图上绘制出你运动的轨迹
    iOS地图位置开发
    IOS开发中的数据库的学习
    Iphone开发 有关 Sqllist的用法
    MapKit
    iphone开发 有关 Navigation Bar 和 UITableView 的用法(代码加说明 呵呵)
  • 原文地址:https://www.cnblogs.com/aukle/p/3217607.html
Copyright © 2011-2022 走看看