分享

STL remove和erase

 WUCANADA 2012-04-14
STL remove和erase
2010年12月23日 星期四 下午 5:08
remove   算法描述:查找的得到第一个元素的位置,然后从此位置开始遍历容器,将后面的元素依次前移,跳过和value相同值的元素,也就是说,所有和value相 同值的元素都会被覆盖,而其他的元素都会依次前移。最后remove返回"指向最后一个   '有用'   元素的iterator",但是在remove算法过程中,并没有修改原容器的size,以及end()。但是从逻辑角度看,最后的[   从remove得到的iterator---_result,   容器的结尾end()   )   这个区间里面的元素已经没有意义了。所以这些元素不应该属于该容器了。remove算法能做的仅此而已,并没有删除这些无用的元素。   
    
  结论:移除容器里面的元素不应该使用remove算法,而是容器自己的方法erase()。

erase使用:

#include <iostream>
#include <vector>

using namespace std;

 

int main()
{
    vector<int> arr;
    arr.push_back(6);
    arr.push_back(7);
    arr.push_back(8);
    arr.push_back(9);

    for(vector<int>::iterator it=arr.begin(); it!=arr.end(); )
    {
        if(* it == 8)
        {
            it = arr.erase(it);
        }
        else
        {
            ++it;
        }
    }

  
//注意上面不能写成
    /*
        for(vector<int>::iterator it=arr.begin(); it!=arr.end(); it ++)
        {
            if(* it == 8)
            {
                arr.erase(it);     //在erase后,it失效,并不是指向vector的下一个元素,it成了一个“野指针”。
            }
        }
    */
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多