仿函数的分析与应用
目录
一、什么是仿函数
二、实例
1.实现一个简单的仿函数
2.匿名对象做仿函数调用
3.库中sort仿函数回调
4.实现一个支持sort回调的仿函数
一、什么是仿函数
通过对类中 重载 operator() 实现 类对象可以 像 函数一样去使用,本质上 是 通过类对象+括号运算符 去调用 operator() 的成员方法 。
二、实例
1.实现一个简单的仿函数
创建类对象后,用类对象() 的方式 便可以调用 ADD类中重载的 operator();
class ADD
{
public :int operator()(int a, int b){return a + b;}
};
int main()
{ADD add_0; // 创建一个类对象,类对象+运算符(对应参数) ------ 仿函数cout << add_0(1, 2) << endl;return 0;
}
2.匿名对象做仿函数调用
匿名对象 + 括号操作符也可以作为仿函数调用(神奇呀,两个括号编译器居然能分清)
3.库中sort仿函数回调
sort 方法允许传递第三个参数,一个对象,但是其重载的方法要有能够比较大小的功能
#include <algorithm>
#include <vector>
int main()
{vector<int> varr = { 3,2,2,4,1,6,7,1,9,0 };// sort 方法允许传递第三个参数,一个对象,但是其重载的方法要有能够比较大小的功能;sort(varr.begin(), varr.end(), greater<int>());for (auto tem : varr){cout << tem << " ";}return 0;
}
4.实现一个支持sort回调的仿函数
自己实现能比较大小的 operator()方法 即可。
#include <algorithm>
#include <vector>
class My_greater
{
public:bool operator()(int a, int b){return a > b;}
};
int main()
{vector<int> varr = { 3,2,2,4,1,6,7,1,9,0 };// 使用 My_greater() 匿名对象sort(varr.begin(), varr.end(), My_greater());for (auto tem : varr){cout << tem << " ";}return 0;
}