高阶函数的应用
高阶函数就是把函数作为参数使用,一般用 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 表达式不同点在哪?其实,函数对象可以灵活地保存和管理状态,例如在多次调用时保留某些中间值。