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

         函数对象也叫函数符,包括函数名、指向函数的指针和重载了()运算符的类对象。重载的()运算符将使得能够像函数那样使用类对象。如for_each()的第三个参数可以使常规函数,也可以是函数符,它将指定的函数用于区间中的每个成员。

         生成器是不用参数就可以调用的函数符,一元函数是用一个参数可以调用的函数符,而返回bool值的一元函数就是谓词。返回bool类型的二元函数叫二元谓词,如sort()第三个参数就需要二元谓词,前两个参数是要STL容器要排序的迭代器。在list模板中有一个remove_if()成员也是将谓词作为参数,它应用于区间的每个元素,如果谓词返回true,就删除这些元素。谓词只能有一个参数,如果想再传递一个参数,可以使用类成员而不是函数参数传递,注意这时相当于把类对象作为函数符,其内部要重载()运算符。附加的参数可通过构造函数传递。

        transform()有两个版本,第一个版本接受4个参数,前两个参数指定容器区间的迭代器,第三个参数指定将结果复制到哪里的迭代器,最后一个参数是谓词。第二种版本最后一个参数可使用二元谓词,返回两个区间的二元算术运算(如mean,add等)。

        C++还预定了自适应函数符和函数适配器。使函数符成为自适应的原因是,它携带了标示参数类型和返回类型的typedef成员。其意义在于函数适配器可以使用函数对象,并认为存在这些typedef成员。STL使用binder1st和binder2nd可以将自适应二元函数转换为自适应一元函数。如:

        binder1st(f2,val) f1;

         该对象f1与一个将被用作f2()的第一个参数的特定值val相关联。这样f1(x)等价于f2(val,x)。如果要将二元函数multiplies()转换为将参数乘以2.5的一元函数,可用如下方式:

        bind1st(multiplies<double>(),2.5);

  • 相关阅读:
    Python模块之re模块
    Python-正则
    Python算法之二分查找法
    Python函数之递归函数
    Python练习题
    Python函数之匿名函数
    PHP iconv 解决utf-8和gb2312编码转换问题
    IE Firefox 中ZIndex的高低准则
    由于您和其他用户试图同时改变同一数据,导致 Microsoft Jet 数据库引擎停止进程解决办法
    Image MagicK 速查
  • 原文地址:https://www.cnblogs.com/bluecloudwyy/p/5986426.html
Copyright © 2011-2022 走看看