• STL 中元素删除相关算法


    remove

    ①.头文件

    remove 算法定义在头文件 #include 中。

    ②.算法作用

    remove 算法不会改变序列的大小,是通过后面元素往前覆盖实现的,返回新序列有效值的下一个迭代器。

    ③.代码示例

    vector<int> vec = { 1,2,3,6,3,7,3,8,9 };
    cout << "原序列:" << endl;
    for_each(vec.begin(), vec.end(), [](int i) {cout << i<< " "; });
        
    auto iter = remove(vec.begin(), vec.end(), 3);
        
    cout << endl <<  "remove 后:" << endl;
    for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });
        
    vec.erase(iter, vec.end());
    cout << endl << "新序列:" << endl;
    for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    remove_if

    ①.头文件

    remove_if 算法定义在头文件 #include 中。

    ②.算法作用

    remove_if 算法是 remove 的升级版本,可以通过指定一个一元谓词来决定是否移除一个元素,执行结果同 remove 。

    ③.代码示例

    vector<int> vec = { 1,2,3,6,3,7,3,8,9 };
    cout << "原序列:" << endl;
    for_each(vec.begin(), vec.end(), [](int i) {cout << i<< " "; });
        
    vec.erase(remove_if(vec.begin(), vec.end(), [](int i) { return i < 4; }), vec.end());
    cout << endl << "新序列:" << endl;
    for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    remove_copy

    ①.头文件

    remove_copy 算法定义在头文件 #include 中。

    ②.算法作用

    remove_copy 算法执行结果是把删除指定元素后的剩余元素拷贝到一个新的序列 。

    ③.代码示例

    vector<int> vec = { 1,2,3,6,3,7,3,8,9 };
    cout << "原序列:" << endl;
    for_each(vec.begin(), vec.end(), [](int i) {cout << i<< " "; });
        
    vector<int> vec2;
    remove_copy(vec.begin(), vec.end(), back_inserter(vec2), 3);
       
    cout << endl << "新序列:" << endl;
    for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    unique

    ①.头文件

    unique 算法定义在头文件 #include 中。

    ②.算法作用

    unique 算法作用是移除序列中相邻的重复元素,不会改变序列的大小,是通过后面元素往前覆盖实现的,返回新序列有效值的下一个迭代器。

    ③.代码示例

    vector<int> vec = { 1,2,3,3,3,3,3,8,9 };
    cout << "原序列:" << endl;
    for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });
    
    auto iter = unique(vec.begin(), vec.end());
    
    cout << endl << "remove 后:" << endl;
    for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });
    
    vec.erase(iter, vec.end());
    cout << endl << "新序列:" << endl;
    for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    vue3 + antd 图片上传 (精简篇)cv即可
    基于ssm教学评价管理系统获取(java毕业设计)
    TOPSIS法
    ArcGIS导出Excel中文乱码及shp添加字段3个字被截断
    axios简单使用
    适用于C/C++开发人员的HOOPS
    Windows中控制台(cmd)模式下运行程序卡死/挂起现象解决方案(快速编辑模式)
    使用python绘制三维曲线图
    使用注解实现限流
    智能合约漏洞案例,Euler Finance 1.96 亿美元闪电贷漏洞分析
  • 原文地址:https://blog.csdn.net/lizhichao410/article/details/125617402