algorithm的remove和vector.erase

假设有这样一个vector<int> vec 1,2,3,1,4,5


vec.erase(2)
返回一个迭代器指向3,也就是被删除元素2的后一位
erase之后vec为

1,3,1,4,5,


vec.remove(3)
将3后面元素往前移动一位
返回一个迭代器指向原尾部元素加一的位置
remove之后vec为

1,1,4,5,5, //返回的迭代器指向最后一位

例子:假设vector是这样的,1,3,1,3,4,5
remove(3)会变成 1,1,4,5,4,5 //返回的迭代器指向第二个4,也就是倒数第二的位置


调用vec.erase(iter,vec.end())删除所有remove中指定的元素 //iter为上一步remove返回的迭代器
之后vec变成

1,1,4,5,


完整代码

vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);
    vec.push_back(1);
    vec.push_back(4);
    vec.push_back(5);
    for (auto &&item  : vec) {
        printf("%d,", item);
    }
    for (auto iter = vec.begin(); iter != vec.end(); ++iter) {
        if (*iter == 2) {
            vector<int>::iterator i = vec.erase(iter);
            printf("\nerase value 2 return iterator = %d\n", *i);
        }
    }
    printf("after erase 2 \n");
    for (auto &&item  : vec) {
        printf("%d,", item);
    }
    printf("\n");

    auto itre = remove(vec.begin(), vec.end(), 3);
    printf("after remove 3,");
    printf("return iterator value = %d\n", *itre);
    for (auto &&item  : vec) {
        printf("%d,", item);
    }
    printf("\n");

    vec.erase(itre, vec.end());
    printf("after erase remove\n");
    for (auto &&item  : vec) {
        printf("%d,", item);
    }
    return 0;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 10.1 概述 #include //大部分算法定义 #include <numeric> //数值泛型算法 ...
    龙遁流阅读 581评论 0 1
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,533评论 1 51
  • 标签(空格分隔): STL 运用STL,可以充分利用该库的设计,让我为简单而直接的问题设计出简单而直接的解决方案,...
    认真学计算机阅读 1,498评论 0 10
  • Collection接口 Collection接口是所有集合的祖先类。他有两个构造方法,一个无参构造,一个是带Co...
    夜幕繁华阅读 603评论 0 0
  • 一本书, 一句话, 一条路, 一段人生! 爱如夏花,简单,绚烂。
    大果猿阅读 121评论 0 0