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
posted @ 2024-05-10 21:40  秋天Code  阅读(31)  评论(0编辑  收藏  举报