zoukankan      html  css  js  c++  java
  • STL的适配器、仿函数学习之一:accumulate和for_each的使用心得

    accumulate加头文件<numeric>

    for_each加头文件<algorithm>

    对于后者,大家可能熟悉一些。

    accumulate有两种格式,如下:

    格式1:

    template<class _InIt, class _Ty> inline
     _Ty accumulate(_InIt _First, _InIt _Last, _Ty _Val)

    格式2:

    template<class _InIt, class _Ty, class _Fn2> inline
     _Ty _Accumulate(_InIt _First, _InIt _Last, _Ty _Val, _Fn2 _Func)

    对于1,可以作一些简单的数值统计:

    如:

    Code
    #include<numeric>
    int main(){
        
    int a[]={1,2,3,4,5,6,7,8,9};
        
    int sum=accumulate(a,a+9,0.0);
        cout
    <<sum<<endl;
    }

      格式2可以用于一些区间运算,比如要计算vector<int> vec={1,2,3,4,5,6}中所有元素的乘积,则可以利用下面的代码完成:

    Code
    #include<numeric>
    int main(){
        
    int a[]={1,2,3,4,5,6,7,8,9};
        
    int multiple=accumulate(a,a+9,1,multiplies<int>());
        cout
    <<multiple<<endl;
    }

    其中multiples<int>是一个functor,其定义如下:

    template<class _Ty>
     struct multiplies
      : public binary_function<_Ty, _Ty, _Ty>

    于是,引出了两个函数对象的基类unary_function<Arg,Result>和binary_function<Arg1,Arg2,Result>

    其定义如下:

            // TEMPLATE STRUCT unary_function
    template<class _Arg,
        
    class _Result>
        
    struct unary_function
        {    
    // base class for unary functions
        typedef _Arg argument_type;
        typedef _Result result_type;
        };

            
    // TEMPLATE STRUCT binary_function
    template<class _Arg1,
        
    class _Arg2,
        
    class _Result>
        
    struct binary_function
        {    
    // base class for binary functions
        typedef _Arg1 first_argument_type;
        typedef _Arg2 second_argument_type;
        typedef _Result result_type;
        };

      这两个基类方便我们派生出很多有用的子函数对象。

      如果extends了unary_function,则重载

      result_type operator() (argument_type type)

      如果extends了binary_function,则重载

      result_type operator()(first_argument_type type1,second_argument_type type2)

      以后,我再谈谈C++的约束器、适配器和否定器。

    小人本潜水在思源的贴边
    ID又多 又有钱
    快活乐无边
    谁知道站总监
    他蛮横不留情面
    他勾结站长目无天
    占我ID夺我钱
    我马甲跟他来翻脸
    反被他来把经验减
    我同学骂他欺新人
    反被他捉进了小黑屋里面
    874了一百遍啊一百遍
    啊 最后他咬舌自尽 遗恨人间
    他还将我和马甲赶出了思源 流落在人间
    我为求回思源
    无奈行乞在贴前
    谁知道站总监他实在太阴险
    知道此情形竟派人来暗算将我发文狂删到0篇
    小人ID强 残命独留全
    可怜马甲他 竟遭删
    为求养ID
    惟有傍人卖身自作践
    一面苦赚钱 一面写诗篇
    发誓把名气显
    手刃总监意志坚啊
    从此总监ID念心间
    我永铭记此仇不供戴天
  • 相关阅读:
    【BZOJ1452】【JSOI2009】count
    【BZOJ1030】【JSOI2007】文本生成器
    【BZOJ2427】【HAOI2010】软件安装
    从【BZOJ4173】谈做题技巧
    小A的旅行(绿豆蛙的归宿)【期望DP】
    甜点 【多重背包】
    洛谷 [P1154] 奶牛分厩
    POJ [P2631] Roads in the North
    洛谷 [P3258] 松鼠的新家
    洛谷 [P3398] 仓鼠找sugar
  • 原文地址:https://www.cnblogs.com/CUCmehp/p/1450297.html
Copyright © 2011-2022 走看看