#include<iostream>
#include<vector>
#include<iterator>
#include<algorithm>
#include<functional>
using namespace std;
//假设有一个vector<int>,现在想删除其中所有小于x的元素,但是
//在最后一个其值不小于y的元素之前所有的元素都要留下
//方法一:
void Function1(vector<int> v, int x, int y)
{
v.erase(
remove_if(find_if(v.rbegin(), v.rend(),
bind2nd(greater_equal<int>(), y)).base(),
v.end(),
bind2nd(less<int>(), x)),
v.end());
}
//上边的方法太直写型,让你一看看不懂,分解的方法如下:
void Function2(vector<int>v, int x, int y)
{
typedef vector<int>::iterator VecIter;
VecIter rangeBegin =
find_if(v.rbegin(), v.rend(), bind2nd(greater_equal<int>(), y)).base();
// 把rangeBegin初始化为指向最后一个出现一个大于等于y的值后面的元素。
// 如果没有那样的值, 把rangeBegin初始化为v.begin()。如果那个值的
// 最后一次出现是v中的最后一个元素,就把rangeBegin初始化为v.end()。
//注意上边的这些注释,是find_if自动完成的,不需要添加代码。
//在rangeBegin到v.end区间,删除所有小于x的值
v.erase(remove_if(rangeBegin, v.end(), bind2nd(less<int>(), x)), v.end());
}
int main()
{
return 0;
}
,使用STL,好好使用,有效使用。但避免产生直写型代码。最后,这样的代码完全不高效。