函数适配器

来源:互联网 发布:php清除cdn缓存 编辑:程序博客网 时间:2024/05/29 13:55
绑定器:
作用是将二元函数的一个参数绑定到某一特定的值上,将二元函数对象转化为一元函数对象。
如:int * where=find_if(&array1[0],&array1[100],bind2nd(greater<int>(),200));
相似的,函数适配器bind1st可以用来绑定二元函数对象的第一个参数。
取反器:
取反器是一种用来对判决函数对象的结果取反的函数知配器,有两种not1和not2。
not1是对一元函数对象取反,not2是对二元函数取反。即如果传给函数对象的只有一个参数,则要用not1。
如:int * where=find_if(&array1[0],&array1[100],not1(bind2nd(greater<int>(),200)));
因为array1作为inputiterator,每次只传一个参数到函数对象,所以用not1。
顺便说一下一种很好的传参判断方法:写一个类,重载()算符,并接收传进来的参数,判断后再返回真假。
写一个例子:
class U:public binary_function<U,U,bool>
{
public:
 int id;
 bool operator()(const U& x,const U& y)const
 {
  return x.id>=y.id;
 }
};
int main()
{
 vector<U> vector1(100);
 //对vector1容器每个成员的id赋值
 sort(vector1.begin(),vector1.end),not2(U()));
 //这个排序就完成了我们的目的,注意binary_function<U,U,bool> and unary_function<U,bool>
 //一元函数和二元函数,对函数个数要求不同,在泛型算法中一定要分清各种函数对象对参数的不同要求
}
 
函数指针适配器:
看代码:set<string,less<string>> set1;set<string,greater<string>> set2;
这里很可能造成代码重复,解决方法:set<string,pointer_to_binary_finction<const string&,const string&,bool>>
再利用ptr_fun指定一个一元或二元函数,转换为一个一元或二元函数对象。
原创粉丝点击