在使用一些基于范围的模板函数时(如 sort()、all_of()、find_if() 等),常常需要我们传入一个可调用对象,以指明我们需要对范围中的每个元素进行怎样的处理。可调用对象可以是函数、函数指针、lambda表达式、bind创建的对象或者重载了函数调用运算符的类对象。
函数
bool cmp(const int &a, const int &b) {
return a < b; // 从小到大排列
//return a > b; // 从大到小排列
}
vector<int> v = {3, 6, 2, 7, 4, 9, 1};
sort(v.begin(), v.end(), cmp);
函数指针
bool cmp(const int &a, const int &b) {
return a < b; // 从小到大排列
//return a > b; // 从大到小排列
}
bool (*p)(const int &a, const int &b);//创建一个函数指针
p = cmp;//与函数进行绑定
vector<int> v = {3, 6, 2, 7, 4, 9, 1};
sort(v.begin(), v.end(), p);
lambda表达式
使用函数或者函数指针充当可调用对象对函数的形参有严格的限制,有时我们想传入一些辅助变量,