卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章77900本站已运行445

C++ 函数式编程的心路历程:指针与 lambda 的更迭

c++++ 函数式编程历经指针时代(采用函数指针)和 lambda 表达式时代(使用 lambda 表达式定义和传递函数)。lambda 表达式更简洁紧凑,提高代码可读性,在现代 c++ 函数式编程中更受欢迎。指针仍提供低级内存模型访问优势,但 lambda 表达式简化了比较逻辑等操作,例如查找容器中最大元素的案例。

C++ 函数式编程的心路历程:指针与 lambda 的更迭

C++ 函数式编程的心路历程:指针与 lambda 的更迭

在 C++ 的世界里,函数式编程曾经是一条鲜为人知的道路。然而,随着指针和 lambda 表达式的兴起,一切悄然改变。

指针时代:函数指针

立即学习“C++免费学习笔记(深入)”;

过去,我们在 C++ 中实现函数式编程 largely 依赖于函数指针。例如,可以通过 std::function 对象来存储和传递函数指针:

std::function<int(int)> f = [](int x) { return x * x; };

然后,我们可以像这样调用它:

int result = f(5); // result 将为 25

Lambda 表达式时代

随着 C++11 的引入,lambda 表达式横空出世。它们提供了更加简洁的方式来定义和传递函数。

auto f = [](int x) { return x * x; };

与函数指针相比,lambda 表达式更加紧凑,并且可以直接内联在代码中,从而提高可读性和可维护性。

实战案例:查找最大值

以下是一个使用 lambda 表达式的实战案例,它用于查找一个容器中元素的最大值:

#include <vector>
#include <algorithm>

int main() {
  std::vector<int> v = {1, 3, 5, 2, 4};
  int max_element = *std::max_element(v.begin(), v.end(),
                                     [](int a, int b) { return a > b; });
  std::cout << "最大值:" << max_element << std::endl;

  return 0;
}

在上面的代码中,std::max_element 函数使用 lambda 表达式作为比较器,它返回 a 是否大于 b。lambda 表达式以简洁的方式定义了比较逻辑,消除了创建和传递单独比较函数的需要。

指针和 lambda 表达式在 C++ 函数式编程中各具优势。指针提供了对低级内存模型的访问,而 lambda 表达式则增强了代码的简洁性和可读性。随着时间的推移,lambda 表达式逐渐成为现代 C++ 函数式编程中更受欢迎的选择。

卓越飞翔博客
上一篇: 从指针到 lambda:C++ 函数发展的里程碑
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏