C++不得不了解的知识 函数对象(仿函数)

函数对象基本使用

小刘:乔哥没在啊,还想问问他什么是仿函数呢?
宇哥:他呀,就他讲的那些东西,谁能听懂,讲的好烂。。
小刘:也是,要不咋俩讨论讨论?
宇哥:也行,咋俩这水平比那秃子可高多了。


小刘:函数对象是个对象(类),怎么又有函数,蒙了?
宇哥:不冲突,因为它又叫仿函数,即类实现了函数的功能

小刘:哦,原来是这样。那内部咋实现的呢?
宇哥:其实就是类里面重载了括号。

小刘:这个我知道,上节课刚学的重载。 宇哥:对,本质就是重载,没那么高大上。给你看一看代码 利用仿函数实现了类似函数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++的最后一堂课了,不见不散欧
小刘:对了:听说点赞的人会越来越帅哦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章