博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数对象
阅读量:4952 次
发布时间:2019-06-12

本文共 850 字,大约阅读时间需要 2 分钟。

     函数对象也叫函数符,包括函数名、指向函数的指针和重载了()运算符的类对象。重载的()运算符将使得能够像函数那样使用类对象。如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);

转载于:https://www.cnblogs.com/bluecloudwyy/p/5986426.html

你可能感兴趣的文章
k-means原理、优缺点及改进
查看>>
【适配整理】Android 7.0 调取系统相机崩溃解决android.os.FileUriExposedException
查看>>
GitLab版本管理
查看>>
install mongodb on macos
查看>>
A-Z
查看>>
iOS 代码混淆的简单使用
查看>>
购物车升级版本
查看>>
移动端遇到的问题
查看>>
ES6中变量的解析赋值的用途
查看>>
load()和get()的区别
查看>>
可遇不可求的Question之反序列化时出现“base-64 字符数组的无效长度”错误提示篇...
查看>>
[计算机网络]简易http server程序
查看>>
学习MVC之租房网站(二)-框架搭建及准备工作
查看>>
旅行 (Standard IO)
查看>>
BigData10 Collections集合工具类 Arrays 数组工具类
查看>>
node + exrepss 实现一个简单的图片爬虫网页
查看>>
【设计模式】六大设计原则总结
查看>>
Elasticsearch入门
查看>>
UEditor常用设置函数记录
查看>>
PHP高效率写法(详解原因)
查看>>