STL利用remove_if实现filter功能
remove_if
函数是STL中的一个函数
remove_if(iterator_begin, iterator_end, opt)
该函数的作用是迭代容器并删除元素,该函数的第一、二个参数是容器的迭代器,第三个参数是自定义比较函数,如果返回true则表示删除这个元素
在遍历过程中,该函数并不是真正的删除元素,而是将需要删除的元素移动到容器末尾,最后函数返回所有删除元素的开始位置的迭代器
配合可迭代容器的erase()
方法可以实现类似于其他语言中的filter效果
示例:过滤掉数组中的偶数
#include<bits/stdc++.h>
using namespace std;
// 如果是偶数返回true
bool isEven(int n) {
return n % 2 == 0;
}
int main() {
vector<int> arr = {1, 2, 3, 4, 5, 6, 7};
arr.erase(remove_if(arr.begin(), arr.end(), isEven), arr.end());
cout << "size = " << arr.size() << endl;
for(auto item : arr) {
cout << item << ' ';
}
return 0;
}
运行结果是
size = 4
1 3 5 7