高阶函数的应用
高阶函数就是把函数作为参数使用,一般用 std::function。
#include <vector>
#include <algorithm>
// 定义一个高阶函数,接受一个比较函数作为参数
void sortNumbers(std::vector<int> &numbers, std::function<bool(int, int)> comp) {
std::sort(numbers.begin(), numbers.end(), comp);
}
这个例子中,sortNumbers 函数接受一个比较函数作为参数,这个比较函数决定了如何对向量进行排序。

函数对象
函数对象是一种重载了 operator() 的类,它可以像函数一样被调用。函数对象通常用于函数式编程,以便可以灵活地定义可调用的对象。
#include <iostream>
#include <vector>
#include <algorithm>
class MultiPly {
public:
MultiPly(int factor) : m_factor(factor) {}
int operator()(int n) const {
return n * m_factor;
}
private:
int m_factor;
}
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
int factor = 3;
std::transform(numbers.begin(), numbers.end(), MultiPly(2));
for(int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
在这里可能有人又要问了,函数对象与 Lambda 表达式不同点在哪?其实,函数对象可以灵活地保存和管理状态,例如在多次调用时保留某些中间值。