zoukankan      html  css  js  c++  java
  • 函数对象

    如果一个类重载了运算符“()”,则该类的对象被称为函数对象。

    clas CMyAverage{
    public:
        double operator()(int a1,int a2,int a3){
                return  (double)(a1+a2+a3)/3;
        }
    };
    CMyAverage  average; //函数对象
    cout<<average(3,2,3); // average.operator()(3,2,3)
    输出2.666672020-07-08

    可调用对象:函数名,函数指针,lambda表达式,bind创建的对象,重载了函数调用运算符的类的对象(函数对象)

    函数对象的应用:

    Accumulate源代码1: //第三个参数的类型决定了返回值的类型

    template <class _InputIterator, class _Tp>     
    _Tp  accumulate(_InputIterator __first, _InputIterator __last, _Tp __init)
    {
        for (; __first != __last; ++__first)
            __init = __init + *__first;
        return __init;
    }
    // typename等价于class

    Accumulate源代码2:

    template <class _InputIterator, class _Tp, class _BinaryOperation>
       T accumulate (_InputIterator _first, _InputIterator _last, _Tp _init,
                     _BinaryOperation _binary_op)
    {  
        for(;_first!=_last;++_first)
            _init = _binary_op(_init,*first);
        return _init;
      }
    //调用Accumulate时,和_binary_op对应的实参可以是函数,函数指针,函数对象。

    greater函数对象类模板

     1 #include<iostream>
     2 #include<vector>
     3 #include<iterator>
     4 #include<functional>
     5 #include<algorithm>
     6 using namespace std;
     7  
     8 int main()
     9 {
    10     int A[]={1,4,3,7,10};
    11     const int N=sizeof(A)/sizeof(int);
    12     vector<int> vec(A,A+N);
    13     ostream_iterator<int> output(cout," ");
    14     cout<<"Vector vec contains:";
    15     copy(vec.begin(),vec.end(),output);
    16     
    17     cout<<"
    After greater<int>():";
    18     sort(vec.begin(),vec.end(),greater<int>());//内置类型从大到小 
    19     copy(vec.begin(),vec.end(),output);
    20     
    21     cout<<"
    After less<int>():";
    22     sort(vec.begin(),vec.end(),less<int>());   //内置类型小大到大 
    23     copy(vec.begin(),vec.end(),output);
    24     
    25     return 0;
    26 }

  • 相关阅读:
    CSS3盒模型display:box详解
    微信公众平台开发:Web App开发入门
    viewController启动方法分析
    图片上加载阴影效果
    属性 与成员变量的 区别与联系 及属性修饰词理解
    封装 继承 多态 抽象的一点点理解
    UISegmentedControl 踩坑
    沙盒存储
    iOS项目在非测试设备上的安装方法(项目上线前)
    三方
  • 原文地址:https://www.cnblogs.com/wsl96/p/13267648.html
Copyright © 2011-2022 走看看