C++语法基础--函数对象,函数对象的函数适配器(绑定器,求反器)

1.定义了调用操作符的类,其对象称为函数对象,即它们是行为类似函数的对象
  Example:
      class abs
{
   public:
      int operator()(int i)
      {
          return i>=0?i:-i;
      }
   
};


int main()
{
  abs ob;  
  cout<<ob(-1)<<endl;
//1
   return 0;
 };




2.标准库定义的函数对象
  头文件#include<functional>



  Tips:
     *每个类表示一个给定操作符
    *每个函数对象类都是一个类模板


   Example:
     int main()
{
    plus<int> add;
    cout<<add(1,1)<<endl;
//2
    return 0;
 };




3.在范型算法中使用标准函数对象
   *函数对象常用于覆盖算法使用的默认操作符
   Example:
   int main()
{
   int arr[]={3,1,4,2,5};
   vector<int> vec(arr,arr+5);
   sort(vec.begin(),vec.end(),greater<int>()); 
  for(vector<int>::iterator it=vec.begin();it!=vec.end();it++)
   {
       cout<<*it<<"\t";
//5 4 3 2 1
    } 
   return 0;
 };






4.函数对象的函数适配器
  作用:用于特化和扩展一元和二元函数对象
  *绑定器:每个绑定其接受一个函数对象和一个值
    bind1st:将定值绑定到二元函数对象的第一个实参
    bind2nd:将定值绑定到二元函数对象的第二个实参
   
 int main()
{
   int arr[]={3,1,4,2,5};
   int res;
   res=count_if(arr,arr+5,bind2nd(greater<int>(),2)); 
   cout<<res<<endl;
//3
  
    
   return 0;
 };
     




   *求反器:将函数对象的真值求反
     not1:将一元函数对象的真值求反
     not2:将二元函数对象的真值求反
 Eample:
  
int main()
{


   int arr[]={3,1,4,2,5};
   int res;
   res=count_if(arr,arr+5,not1(bind2nd(greater<int>(),2))); 
   cout<<res<<endl;
//2
  
   return 0;
 };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值