• STL的function object concepts


    1、几乎任何算法都能以 [ 将其行为的某一部分抽象为function object ]的方式来加以一般化;

    2、Function objects与adaptable function objects的区别:后者需要定义引用类型argument_type等,一般继承自基类unary_function和binary_function;

    3、任何function object concept 的基本条件只是:如果f是个function object,我们可以将operator( )施行于 f 身上。

    4、算法中固定了Function objects的输入变量及其个数,其一般都是指相关迭代器指针;
    而Function objects adapter的一个作用也是修改adaptable function objects的输出变量个数operator()( );

    struct last_name_is
    {
    string value;
    last_name_is(const string& val) : value(val) { } (构造函数初始化;)
    bool operator()(const Person& x) const { (const Person& x 是对象的输入,被调用时,由调用的函数内部输入参数,一般是迭代器对象值)
    return x.last_name == value;
    }
    };
    find_if(first, last, last_name_is("Smith"))


    class类Function object
    0、
    template<class Number> struct even
    {
    bool operator( ) (Number x) const { return (x & 1)==0;)}
    };
    这里的(Number x) 是类even的输出;
    一般还定义一个初始化函数constructor;
    1、find_if(f, l, even<int>( ));
    even<int>是个class,所以我们必须将该种class object传给find_if。所以我们必须调用其constructor。
    2、因为operator()被声明为inline,所以使用even时,不需任何函数调用;
    3、find_if(f, l, even<int>( ) )
    function call操作符operator()可以被重载,所以只要某个型别具有妥善定义的operator(),你便可以将该对象传给算法find_if当做引数。

  • 相关阅读:
    Spring---入门
    Struts2---数据的校验
    Mybatis入门(二)增删改查
    解决pyinstaller打包后运行,出现ModuleNotFoundError: No module named 'pywt._extensions._cwt'
    Python打包方法——Pyinstaller CentOS下踩坑记录
    Spring Boot + kkFileView-2.1.2 实现文档在线预览
    Spring Boot 文件下载
    Spring Boot 文件上传
    Spring Boot 整合 Shiro+Thymeleaf
    Spring Boot 整合 Druid && 配置数据源监控
  • 原文地址:https://www.cnblogs.com/wllwqdeai/p/10401827.html
Copyright © 2020-2023  润新知