函数对象基本使用
小刘:乔哥没在啊,还想问问他什么是仿函数呢?
宇哥:他呀,就他讲的那些东西,谁能听懂,讲的好烂。。
小刘:也是,要不咋俩讨论讨论?
宇哥:也行,咋俩这水平比那秃子可高多了。
小刘:函数对象是个对象(类),怎么又有函数,蒙了?
宇哥:不冲突,因为它又叫仿函数,即类实现了函数的功能
小刘:哦,原来是这样。那内部咋实现的呢?
宇哥:其实就是类里面重载了括号。
小刘:这个我知道,上节课刚学的重载。 宇哥:对,本质就是重载,没那么高大上。给你看一看代码 利用仿函数实现了类似函数Add的功能
#include <iostream> #include<vector> #include<algorithm> using namespace std; class Add { public: int operator()(int a, int b) { return a + b; } }; int main() { Add add; int sum =add(2, 3); cout << sum; }
小刘:那仿函数有什么特点呢?
宇哥:
谓词
小刘:这个我知道,为此就是返回类型为bool的称之为谓词
宇哥:那考考你,什么是一元谓词和二元谓词
小刘:简单:一元谓词就是operator()接受的参数是一个,二元就是两个。
宇哥:聪明!
小刘:就是不太清楚什么时候使用
宇哥:乔哥下期会讲,先看看代码吧。#include <iostream> #include<vector> #include<algorithm> using namespace std; class Compare { public: bool operator()(int a, int b) { return a > b; } }; int main() { Compare compare; bool condition =compare(2, 3); cout << condition; }
内建函数对象
需头文件 #include< functional>
宇哥:内建函数,听起来好像是,提前写好的函数
小刘:对的,系统里提供给我们,直接用就可以了
算术仿函数
小刘:就拿plus举个例子
#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
plus<int> add;
int num = add(10, 20);
cout << num << endl;//30
}
关系仿函数
逻辑仿函数
乔哥:刚才我听见有人叫我秃子
小刘,宇哥:哪有,一定是听错了。。。
乔哥:好吧,下一次讲SLT算法,会用到谓词哦,这也将是C++的最后一堂课了,不见不散欧
小刘:对了:听说点赞的人会越来越帅哦。