把类对象,像函数名一样使用。
仿函数(functor),就是使一个类的使用看上去像一个函数。其实现就是类中实现
一个 operator(),这个类就有了类似函数的行为,就是一个仿函数类了。
class 类名 { 返值类型 operator()(参数类型) 函数体 }
#include #include using namespace std; class Pow { public: //仿函数 double operator()(double a, int b){ double result = 1; for(int i=0;i
functor 的优势在于,是对象形式,可以携带更多的的信息,用于作出判断。 比如,我们可以在对象初始化的时候,传入参数来决定状态,而不用去修改原代码。
#include #include #include using namespace std; //局限性较大 bool myCompare(int a, int b){ return a < b; } //仿函数,可以携带更多参数 class Compare{ public: Compare(bool flag=true):flag(flag){} bool operator()(int a, int b){ if (flag==true) return a < b; else return a > b; } private: bool flag; }; int main(){ int arr[] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5}; vector vi(arr, arr+11); sort(vi.begin(), vi.end(), Compare(false)); //c98的写法 // vector::iterator itr; // for(itr=vi.begin();itr!=vi.end();++itr){ // cout<<*itr<<" "; // } //c++11的写法 for(auto itr=vi.begin();itr!=vi.end();++itr){ cout<<*itr<<" "; } //c++17的写法 // for(auto i : vi){ // cout<
上一篇:linux 常用的命令