📜  C++ STL-algorithm.remove_if()函数(1)

📅  最后修改于: 2023-12-03 14:59:45.519000             🧑  作者: Mango

C++ STL-algorithm.remove_if()函数

在C++ STL中,algorithm是一个非常常用的库,其中remove_if()函数是一个非常常用的操作,用于删除满足特定条件的元素。

函数介绍

remove_if()函数位于algorithm头文件中,其形式如下:

template <class InputIterator, class Predicate>
InputIterator remove_if (InputIterator first, InputIterator last, Predicate pred);

该函数会将[first, last)区间内满足谓词pred条件的所有元素“移动”到区间尾部,然后返回一个指向新区间结尾的迭代器(指向第一个被移动元素的位置)。不属于该条件的元素仍然保持在[first, last)区间中。

注意:该函数并不真的删除元素,只是将符合条件的元素移动到了区间尾部。

使用示例

举例来说,下面就是一个简单的使用remove_if()函数的例子:

#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> vec = {1, 2, 3, 4, 5, 6, 7, 8, 9};

    // 删除奇数
    vec.erase(remove_if(vec.begin(), vec.end(), [](int n) { return n % 2 == 1; }), vec.end());

    // 输出结果
    for (auto n : vec) {
        cout << n << " ";
    }
    cout << endl;
}

该代码会删除vector中的所有奇数,并输出结果:

2 4 6 8

值得注意的是,remove_if()函数只是将符合条件的元素移动到了区间尾部,需要使用vector中的erase()函数删除区间尾部的元素。由于remove_if()函数并不真的删除元素,因此end()并没有被改变,即不需要向erase()函数传递一个新的end()迭代器(这一点与erase()函数删除元素是不同的)。

总结

remove_if()函数是一个非常常用的STL函数,可用于删除满足特定条件的元素。在使用该函数时,需要注意移动的元素并没有真正删除,需要使用erase()函数删除区间尾部的元素。