在传统印象中,C++是一门面向对象的编程语言。但随着C++11、C++14、C++17乃至C++20标准的不断演进,C++函数式编程的能力也日益强大。本教程将带你从零开始,理解C++函数式编程的基本概念,并学会如何在实际项目中使用它。
函数式编程是一种编程范式,强调“函数”作为一等公民(first-class citizen),即函数可以像变量一样被传递、返回和存储。其核心思想包括:
在C++中,函数对象(也叫仿函数,functor)是重载了 () 运算符的类实例。它们可以像函数一样被调用,同时还能保存状态。
#include <iostream>class Adder {public: Adder(int val) : value(val) {} int operator()(int x) const { return x + value; }private: int value;};int main() { Adder add5(5); std::cout << add5(10) << std::endl; // 输出 15 return 0;} 上面的 Adder 类就是一个典型的函数对象。通过重载 (),我们可以像调用函数一样使用 add5(10)。
C++11 引入了 C++ Lambda表达式,这是实现函数式编程最便捷的方式。Lambda 允许你在代码中直接定义匿名函数。
#include <iostream>#include <vector>#include <algorithm>int main() { std::vector<int> numbers = {1, 2, 3, 4, 5}; // 使用 Lambda 表达式筛选偶数 std::vector<int> evens; std::copy_if(numbers.begin(), numbers.end(), std::back_inserter(evens), [](int n) { return n % 2 == 0; }); for (int n : evens) { std::cout << n << " "; // 输出 2 4 } return 0;} 这里的 [](int n) { return n % 2 == 0; } 就是一个 Lambda 表达式。方括号 [] 是捕获列表,用于决定 Lambda 能访问哪些外部变量。
高阶函数C++ 是指接受函数作为参数或返回函数的函数。C++标准库提供了许多高阶函数,如 std::transform、std::for_each、std::accumulate 等。
#include <iostream>#include <vector>#include <numeric> // for std::accumulateint main() { std::vector<int> nums = {1, 2, 3, 4, 5}; // 使用 Lambda 作为二元操作函数计算乘积 int product = std::accumulate(nums.begin(), nums.end(), 1, [](int a, int b) { return a * b; }); std::cout << "Product: " << product << std::endl; // 输出 120 return 0;} 在这个例子中,std::accumulate 是一个高阶函数,它接收一个 Lambda 表达式作为参数,用于定义如何“累积”元素。
通过本教程,你已经掌握了 C++函数式编程 的三大核心要素:
() 实现可调用对象掌握这些技巧,不仅能让你的代码更简洁、更安全,还能提升程序的可读性和可维护性。赶快在你的项目中尝试使用吧!
本文由主机测评网于2025-12-21发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/20251211051.html