你会想要使用 remove_if (没有erase_if:你将如何实现一个不知道容器被删除的擦除?)
这是一个(编译,测试)程序,演示了如何做到这一点:
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
struct V
{
int x;
int y;
};
bool y_less_than_5(V const &v)
{
return v.y < 5;
}
int main()
{
vector<V> vec;
V v;
v.x = 4; v.y = 1; vec.push_back(v);
v.x = 17; v.y = 3; vec.push_back(v);
v.x = 21; v.y = 5; vec.push_back(v);
v.x = 36; v.y = 7; vec.push_back(v);
v.x = 25; v.y = 9; vec.push_back(v);
vec.erase(
remove_if(vec.begin(), vec.end(), y_less_than_5),
vec.end());
for(vector<V>::const_iterator it = vec.begin(); it != vec.end(); ++it)
{
cout << "[" << it->x << "," << it->y << "]" << endl;
}
}
输出:
[21,5]
[36,7]
[25,9]
您提供谓词的确切方法可能会有所不同,但这是一个不同的问题;)