C++ Primer 5th笔记(chap 14 重载运算和类型转换)标准库函数对象
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 重载运算和类型转换)标准库函数对象相关推荐
- C++ Primer 5th笔记(chap 14 重载运算和类型转换)可调用对象与function
1. 5种形式 可调用对象有5种形式,类型各不同: 形式 解释 函数 返回值类型和实参类型 函数指针 返回值类型和实参类型 lambda表达式 类类型 bind创建的对象 todo 重载了函数调用运算 ...
- C++ Primer 5th笔记(chap 14 重载运算和类型转换)递增和递减运算符
并不要求递增和递减运算符一定是类的成员函数,但是因为这个运算符改变的正好是所操作的对象的状态,所以建议将它们设为成员函数. 为了和内置版本保持一致,前置运算符应该返回递增或递减后对象的引用. 为了和内 ...
- C++ Primer 5th笔记(chap 14 重载运算和类型转换)重载运算概述
1. 定义 重载运算是具有特殊名字的函数,它们的名字由关键字operator和其后要定义的运算符号组成. 2. 运算符表 2.1 可重载运算符 运算符类型 运算符种类 双目算术运算符 + (加),-( ...
- C++ Primer 5th笔记(chap 14 重载运算和类型转换)函数匹配与重载运算符
如果一个类既提供了转换目标是算术类型的类型转换,也提供了重载的运算符,则将会遇到重载运算符与内置运算符的二义性问题. 如果a是一种类型,表达式 a sym b 可能是: //不能通过调用形式来区分当前 ...
- C++ Primer 5th笔记(chap 14 重载运算和类型转换)二义性类型转换
1. 在两种情况下会产生二义性转换歧义: 1.1 A类定义了一个接受B类对象的转换构造函数,同时B类定义了一个转换目标是A类的类型转换运算符. struct B; struct A {A() = de ...
- C++ Primer 5th笔记(chap 14 重载运算和类型转换)lambda函数对象
1. 定义 lambda是函数对象:编写一个lambda后,编译器会将该表达式转换成一个未命名类的未命名对象,类中含有一个重载的函数调用运算符. eg. stable_sort(words.begin ...
- C++ Primer 5th笔记(chap 14 重载运算和类型转换)函数调用运算符
1. 定义 如果类定义了调用运算符(重载了函数调用运算符),则该类的对象被称作函数对象(function object),可以像使用函数一样使用该类的对象, eg. struct absInt{int ...
- C++ Primer 5th笔记(chap 14 重载运算和类型转换)成员运算符
成员运算符分为两种: 解引用运算符* 箭头运算符-> 设计准则 箭头运算符必须是类的成员. 解引用运算符通常也是类的成员,尽管并非必须如此. 重载的箭头运算符必须返回类的指针或者自定义了箭头运算 ...
- C++ Primer 5th笔记(chap 14 重载运算和类型转换)算术和关系运算符
运算符 双目算术运算符 + (加),-(减),*(乘),/(除),% (取模) 关系运算符 ==(等于),!= (不等于),< (小于),> (大于>,<=(小于等于),> ...
- C++ Primer 5th笔记(chap 14 重载运算和类型转换)类类型转换
1. 定义 类型转换运算符:(既然一个类类型可以由实参类型对象隐式转换而来,那么)一个类类型的值也可以转换成其它类型 形式 : operator type() const type 表示某种类型,类型 ...
最新文章
- Python matplotlib可视化:自定义轴标签格式化函数(在轴刻度上添加自定义的数值以及符号形式)、使用自定义函数在Matplotlib中为坐标轴刻度添加自定义符号(例如,货币符号¥$等)
- codeforces 282E Sausage Maximization
- javascript高级程序设计笔记
- SQL Server 2016 列存储技术做实时分析
- TensorFlow创建tensor语句
- 机器学习实战(用Scikit-learn和TensorFlow进行机器学习)(八)
- c语言万能预编译,Objective-C学习笔记
- 在vscode中使用ajax,vscode中的ajax片段,
- vue+ 高德地图 热力图
- advapi32 无法定位_无法定位程序输入点RegSetKeyValueA 于动态链接库 ADVAPI32.dll上 解决方案...
- 配置常用yum源(国内yum源)
- 北邮工程计算-知识点索引--十安辰
- md5加密数据表中的密码php,JSP_使用MD5加密数据库中的用户密码(一),我们知道,现在网络上一般的 - phpStudy...
- Spring Cloud Hoxton 版本微服务项目搭建 admin 监控客户端
- Nexus(maven私服)介绍、安装及使用教程
- 玩转华为数据中心交换机系列 | 配置M-LAG双归接入普通以太网络示例
- 为什么你需要学 Go?
- opencv 图片处理之 png 转 jpg
- (转)深入理解最强桌面地图控件GMAP.NET --- SOSO地图
- 数据库原理 概念结构设计-E-R图及其设计
热门文章
- 图解 Hibernate,session.close(),session.clear()区别
- html 边框循环变色,方框用过渡走一圈变色用css怎么实现
- mongodb 索引去重_PostgreSQL13新特性解读Btree索引去重Deduplication
- css点击a标签显示下划线_好程序员HTML5培训教程-html和css基础知识
- do while循环语句_流程控制之循环语句【while循环语句】
- 机房中铅酸蓄电池的性能参数及优缺点
- ML之xgboost :xgboost.plot_importance()函数的解读
- 成功解决Exception unhandled AttributeError 'MainWindow' object has no attribute 'setDaemon'
- Interview:算法岗位面试—上海某公司算法岗位(偏机器学习,互联网金融行业)技术面试考点之数据结构相关考察点—斐波那契数列、八皇后问题、两种LCS问题
- ML之Clustering之K-means:K-means算法简介、应用、经典案例之详细攻略