1. 定义

标准库定义的函数对象(Library-Defined Function Objects):标准库在头文件functional中定义了一组表示算术运算符、关系运算符和逻辑运算符的类,每个类分别定义了一个执行命名操作的调用运算符。
这些类都被定义为模板的形式,可以为其指定具体的应用类型(即调用运算符的形参类型)。
eg.

vector<string> svec = { "a31", "b1" };
sort(svec.begin(), svec.end(), greater<string>());
for_each(svec.begin(), svec.end(), [](const string& s){std::cout << s << endl; });plus<int> intAdd;   //可执行int加法的函数对
negate<int> intNegate;    //可对int值取反的函数对象
int sum = intAdd(10, 20);  //sum=30
std::cout << sum << endl;
sum = intAdd(10, intNegate(10));   //sum=0
std::cout << sum << endl;

输出结果为

b1
a31
30
0

2. 标准库函数对象列表:

算术 关系 逻辑
plus equal_to logical_and
minus not_equal_to logical_or
multiplies greater logical_not
divides greater_equal
modulus less
negate less_equal

3. 可以比较指针

eg.

//lambda表达式是比较两个字符串大小string a1 = "b1";string b1 = "a1";vector<string*> nameTable = {&a1 , &b1};    // vector of pointerssort(nameTable.begin(), nameTable.end(),          [](string* a, string* b) { return *a < *b; });for_each(nameTable.begin(), nameTable.end(), [](string* s){std::cout << *s << endl; });
//标准库比较两个指针的内存地址, vector<string*> nameTable2 = { &a1 , &b1 };    // vector of pointers sort(nameTable2.begin(), nameTable2.end(), less<string*>());for_each(nameTable2.begin(), nameTable2.end(), [](string* s){std::cout << *s << endl; });

输出:

a1
b1
b1
a1

【引用】

[1] 代码functionObject.h

C++ Primer 5th笔记(chap 14 重载运算和类型转换)标准库函数对象相关推荐

  1. C++ Primer 5th笔记(chap 14 重载运算和类型转换)可调用对象与function

    1. 5种形式 可调用对象有5种形式,类型各不同: 形式 解释 函数 返回值类型和实参类型 函数指针 返回值类型和实参类型 lambda表达式 类类型 bind创建的对象 todo 重载了函数调用运算 ...

  2. C++ Primer 5th笔记(chap 14 重载运算和类型转换)递增和递减运算符

    并不要求递增和递减运算符一定是类的成员函数,但是因为这个运算符改变的正好是所操作的对象的状态,所以建议将它们设为成员函数. 为了和内置版本保持一致,前置运算符应该返回递增或递减后对象的引用. 为了和内 ...

  3. C++ Primer 5th笔记(chap 14 重载运算和类型转换)重载运算概述

    1. 定义 重载运算是具有特殊名字的函数,它们的名字由关键字operator和其后要定义的运算符号组成. 2. 运算符表 2.1 可重载运算符 运算符类型 运算符种类 双目算术运算符 + (加),-( ...

  4. C++ Primer 5th笔记(chap 14 重载运算和类型转换)函数匹配与重载运算符

    如果一个类既提供了转换目标是算术类型的类型转换,也提供了重载的运算符,则将会遇到重载运算符与内置运算符的二义性问题. 如果a是一种类型,表达式 a sym b 可能是: //不能通过调用形式来区分当前 ...

  5. C++ Primer 5th笔记(chap 14 重载运算和类型转换)二义性类型转换

    1. 在两种情况下会产生二义性转换歧义: 1.1 A类定义了一个接受B类对象的转换构造函数,同时B类定义了一个转换目标是A类的类型转换运算符. struct B; struct A {A() = de ...

  6. C++ Primer 5th笔记(chap 14 重载运算和类型转换)lambda函数对象

    1. 定义 lambda是函数对象:编写一个lambda后,编译器会将该表达式转换成一个未命名类的未命名对象,类中含有一个重载的函数调用运算符. eg. stable_sort(words.begin ...

  7. C++ Primer 5th笔记(chap 14 重载运算和类型转换)函数调用运算符

    1. 定义 如果类定义了调用运算符(重载了函数调用运算符),则该类的对象被称作函数对象(function object),可以像使用函数一样使用该类的对象, eg. struct absInt{int ...

  8. C++ Primer 5th笔记(chap 14 重载运算和类型转换)成员运算符

    成员运算符分为两种: 解引用运算符* 箭头运算符-> 设计准则 箭头运算符必须是类的成员. 解引用运算符通常也是类的成员,尽管并非必须如此. 重载的箭头运算符必须返回类的指针或者自定义了箭头运算 ...

  9. C++ Primer 5th笔记(chap 14 重载运算和类型转换)算术和关系运算符

    运算符 双目算术运算符 + (加),-(减),*(乘),/(除),% (取模) 关系运算符 ==(等于),!= (不等于),< (小于),> (大于>,<=(小于等于),> ...

  10. C++ Primer 5th笔记(chap 14 重载运算和类型转换)类类型转换

    1. 定义 类型转换运算符:(既然一个类类型可以由实参类型对象隐式转换而来,那么)一个类类型的值也可以转换成其它类型 形式 : operator type() const type 表示某种类型,类型 ...

最新文章

  1. Python matplotlib可视化:自定义轴标签格式化函数(在轴刻度上添加自定义的数值以及符号形式)、使用自定义函数在Matplotlib中为坐标轴刻度添加自定义符号(例如,货币符号¥$等)
  2. codeforces 282E Sausage Maximization
  3. javascript高级程序设计笔记
  4. SQL Server 2016 列存储技术做实时分析
  5. TensorFlow创建tensor语句
  6. 机器学习实战(用Scikit-learn和TensorFlow进行机器学习)(八)
  7. c语言万能预编译,Objective-C学习笔记
  8. 在vscode中使用ajax,vscode中的ajax片段,
  9. vue+ 高德地图 热力图
  10. advapi32 无法定位_无法定位程序输入点RegSetKeyValueA 于动态链接库 ADVAPI32.dll上 解决方案...
  11. 配置常用yum源(国内yum源)
  12. 北邮工程计算-知识点索引--十安辰
  13. md5加密数据表中的密码php,JSP_使用MD5加密数据库中的用户密码(一),我们知道,现在网络上一般的 - phpStudy...
  14. Spring Cloud Hoxton 版本微服务项目搭建 admin 监控客户端
  15. Nexus(maven私服)介绍、安装及使用教程
  16. 玩转华为数据中心交换机系列 | 配置M-LAG双归接入普通以太网络示例
  17. 为什么你需要学 Go?
  18. opencv 图片处理之 png 转 jpg
  19. (转)深入理解最强桌面地图控件GMAP.NET --- SOSO地图
  20. 数据库原理 概念结构设计-E-R图及其设计

热门文章

  1. 图解 Hibernate,session.close(),session.clear()区别
  2. html 边框循环变色,方框用过渡走一圈变色用css怎么实现
  3. mongodb 索引去重_PostgreSQL13新特性解读Btree索引去重Deduplication
  4. css点击a标签显示下划线_好程序员HTML5培训教程-html和css基础知识
  5. do while循环语句_流程控制之循环语句【while循环语句】
  6. 机房中铅酸蓄电池的性能参数及优缺点
  7. ML之xgboost :xgboost.plot_importance()函数的解读
  8. 成功解决Exception unhandled AttributeError 'MainWindow' object has no attribute 'setDaemon'
  9. Interview:算法岗位面试—上海某公司算法岗位(偏机器学习,互联网金融行业)技术面试考点之数据结构相关考察点—斐波那契数列、八皇后问题、两种LCS问题
  10. ML之Clustering之K-means:K-means算法简介、应用、经典案例之详细攻略