一.概念
#include<iostream>
using namespace std;
class Test{
int n,m;
public:
Test(int n,int m):n(n),m(m){}
int operator()(){//仿函数对应的类要重载括弧运算符
return n+m;
}
int operator()(int h){
return n+m+h;
}
};
int main(){
Test t(1,2);
cout << t.operator()() << endl;
cout << t() << endl; //简写
//t就是仿函数,模仿函数调用
cout << t(3) << endl;//t.operator()(3)
//匿名对象调用:
cout << Test(4,5).operator()(6) << endl;
cout << Test(4,5)(6) << endl;
}
例:排序
#include<iostream>
#include<vector>
#include<algorithm>//sort
using namespace std;
bool cmp(int a,int b){
return a>b;
}
class Cmp{
public:
bool operator()(int a,int b){
return a>b;
}
};
template<class T>
class Compare{
public:
bool operator()(T a,T b){
return a>b;
}
};
template<typename T>
bool compare(T a,T b){
return a>b;
}
int main(){
//给vector排序(降序):
vector<int> vec = {2,4,6,1,3,5};
//sort排序(默认为升序,加上Cmp()参数为降序)
sort(vec.begin(),vec.end(),cmp);//函数指针
sort(vec.begin(),vec.end(),Cmp());//仿函数(默认为升序,加上Cmp()为降序)
sort(vec.begin(),vec.end(),Compare<int>());//类模板仿函数
sort(vec.begin(),vec.end(),compare<int>);//函数模板
sort(vec.begin(),vec.end(),greater<int>());//STL仿函数
for(auto n:vec){
cout << n << " ";
}
cout << endl;
}