lambda表达式:它表示一个可以调用的代码单元,可以理解为一个匿名的内联函数。
lambda表达式形式:[捕获列表] (参数列表)-> 返回类型 {函数体}
仿函数:实质是一个对象,其类中重载了()操作符。
可以向其已有的算法中传递符合规则的仿函数,lambda表达式,函数。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// 谓词:是一个可以调用的表达式,其结果是一个能用作条件的值。
// 一元谓词:只接受单一参数
// 二元谓词:只接受两个参数
// 仿函数(functor),就是使一个类的使用看上去像一个函数。
// 其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了。
class Compare{
public:
bool operator()(const int &a, const int &b) const{
return a > b;
}
};
// 也可以传递一个函数
bool isBig(const int &a, const int &b){
return a > b;
}
// 输出
void print(const vector<int> &v)
{
ostream &os = cout;
char c = ' ';
// 此时输出使用了一个lambda表达式
for_each(v.begin(), v.end(), [&os, c](int num){
os << num << c;
});
cout << endl;
}
int main(void)
{
int a[] = {1,3,2,5,7,4,9,8};
vector <int> v(a,a+8);
sort(v.begin(), v.end());
print(v);
// 仿函数
// Compare compare; // 实质是一个对象
// sort(v.begin(), v.end(), compare);
sort(v.begin(), v.end(), Compare());
print(v);
// 传入一个函数
sort(v.begin(), v.end(), isBig);
print(v);
// 传入lambda表达式
sort(v.begin(), v.end(), [](const int &a, const int &b){
return a > b;
});
print(v);
return 0;
}