c++中 lambda表达式使用

C++11引入了lambda表达式,它是一个匿名函数对象,可以在代码中被直接定义和使用。lambda表达式的格式如下:

[capture list] (parameters) -> return type { function body }

其中,capture list指定了lambda表达式中所使用的外部变量,可以使用[]来表示不捕获任何外部变量,也可以使用&=来捕获所有外部变量,具体用法如下:

  • []:不捕获任何外部变量。
  • [variable]:捕获变量variable,但不改变其值。如果该变量为值类型,则会进行复制;如果为引用类型,则会保留对原变量的引用。
  • [&]:捕获所有外部变量,并将它们作为引用传递。
  • [=]:捕获所有外部变量,并将它们作为值传递。如果要修改某个变量的值,则需要使用mutable关键字。
  • [&, variable]:捕获所有外部变量,并将它们作为引用传递,但除了变量variable以外,其他变量都是值传递。
  • [=, &variable]:捕获所有外部变量,并将它们作为值传递,但除了变量variable以外,其他变量都是引用传递。

parameters指定了lambda表达式的参数列表,与普通函数的参数列表类似。

return type指定了lambda表达式的返回类型,如果省略则会根据函数体自动推断出返回类型。

function body是lambda表达式的函数体,与普通函数的函数体类似。

以下是一个使用lambda表达式的示例:

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> numbers{3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
    
    // lambda表达式:从小到大排序
    std::sort(numbers.begin(), numbers.end(),
              [](int a, int b) { return a < b; });
    
    // lambda表达式:输出所有奇数
    std::for_each(numbers.begin(), numbers.end(),
                  [](int n) { if (n % 2 != 0) std::cout << n << " "; });
    
    return 0;
}

在这个示例中,我们使用了两个lambda表达式。第一个表达式用于对vector进行从小到大的排序;第二个表达式用于输出所有奇数。

C/C++Linux服务器开发/架构师面试题、学习资料、教学视频和学习路线图,免费分享有需要的可以自行添加学习交流群739729163 领取  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值