• 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念心间
    我永铭记此仇不供戴天
  • 相关阅读:
    POJ 2794 Exploring Pyramids
    POJ 2282 The Counting Problem
    eclipse中设置java注释模板
    eclipse复制工程需要注意的地方
    extjs的强大利器GUI设计工具(extjs designer)
    eclipse项目名前出现红色感叹号,小红叉解决(转)
    上传一份个人学习struts2的历程笔记
    struts2中的action与actioncontext的理解
    J2EE后台UI系统框架搭建EXTJs使用(4.1 GPL版本)
    java.lang.OutOfMemoryError: Java heap space 解决方法转测试可用
  • 原文地址:https://www.cnblogs.com/CUCmehp/p/1450297.html
Copyright © 2020-2023  润新知