美文网首页
algorithm的remove和vector.erase

algorithm的remove和vector.erase

作者: 阿布554_ | 来源:发表于2017-09-12 13:48 被阅读64次

假设有这样一个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;

相关文章

网友评论

      本文标题:algorithm的remove和vector.erase

      本文链接:https://www.haomeiwen.com/subject/ydmhjxtx.html