21xrx.com
2024-11-10 00:15:03 Sunday
登录
文章检索 我的文章 写文章
C++ Lambda表达式:入门理解、语法与应用
2023-06-27 13:10:12 深夜i     --     --
C++ Lambda 表达式 语法 应用

Lambda表达式是C++11中新增的一种语法,可以让我们在代码中更方便地使用一些函数式编程的特性。Lambda表达式可以说是函数指针和函数对象的中间产物,使用起来比它们更加方便灵活。下面我们来深入了解一下Lambda表达式的用法。

Lambda表达式可以看做是一个匿名函数,它由一个中括号和一对圆括号以及一个代码块组成。其中,方括号用来指定Lambda表达式的捕获列表,圆括号用来定义参数,代码块中的语句则是函数体。

Lambda表达式的语法如下:

[捕获列表] (参数列表) -> 返回值类型 {函数体}

其中,捕获列表可以为空,参数列表和返回值类型可以省略,但箭头 "->" 和代码块一定要保留。

捕获列表中可以包含传值捕获和引用捕获两种方式。传值捕获会在Lambda表达式创建时将外部变量的值拷贝到Lambda表达式中,而引用捕获则会直接使用外部变量的引用,这样可以兼顾Lambda表达式的灵活性和性能。

下面是Lambda表达式的一个简单例子:

auto func = [](int a, int b) -> int { return a + b; };

//以上代码相当于

//int func(int a, int b) { return a + b; }

使用Lambda表达式可以使代码更加简洁,特别是在函数作为参数传递的情况下。下面是一个使用Lambda表达式的例子:

#include

#include

#include

using namespace std;

int main()

{

  vector vec = 1;

  int count = count_if(vec.begin(), vec.end(), [](int i) return i > 3; );

  cout << count << endl; //输出3

  sort(vec.begin(), vec.end(), [](int a, int b) return a < b; );

  for (auto i : vec)

    cout << i << " "; //输出1 3 5 6 8

  return 0;

}

以上代码使用count_if算法,统计了vec中大于3的元素个数,并使用Lambda表达式定义了一个谓词函数。接着使用sort算法,对vec进行了排序,并使用Lambda表达式定义了一个比较函数。这些使用Lambda表达式的代码都非常简单,但是由于Lambda表达式的功能,使得这些小块的代码更加具有可读性和复用性。

总之,C++11中的Lambda表达式提供了一种简洁、灵活的函数式编程方式,可以帮助我们更加方便地编写更加清晰、易于维护和复用的代码。虽然Lambda表达式在很多方面都可以替换函数指针和函数对象,但是我们也需要注意它在性能和代码复杂度上的影响,使用得当才能发挥出最大的效果。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复