关于Lambda表达式的简单使用

     学习了一个关于Lambda表达式的视频,感觉明白了许多,现将学习笔记整理如下,分享C++初学者:
      一、Lambda表达式定义:字面意思就是没有名字的函数(故称匿名函数),可以很方便的让我们定义函数。并把函数当做参数给别的函数调用。Lambda表达式的优点是代码简洁。
     首先举一个例子:
     vector <int > v { 0,2,5,3,14,6 };  // 实例化一个vector容器v并赋初值
     auto f= [] (int a,int b){return a<b; };  // auto--由编译器自行判断函数返回类型
     sort ( v.begin(), v.end(), f ); //利用Lambda表达式匿名函数 f 中的升序规则对 v 中的值排序
  运行结果:v中的数据被按升序排序。
     二、Lambda表达式的基本语法形式:
     [ OuterVar ]( int x,int y ) -> int { return OuterVar+x+y; }
     [ ] -- 捕获变量列表,可以为空(表示不捕获变量)
     ( ) -- 参数列表
     ->int -- 返回类型,可以忽略,由编译器自行判定,忽略时 -> 也不用写。
     { } -- 函数主体,由于lambda表达式一般是作为函数的参数使用,大多都有返回值。
     再举例:
     auto f= [](int a,int b)->int{return a+b;}
     cout<<f(1,2)<<endl;
     输出结果:3
     三、变量捕获(Capture Clause):
     [ ]内不为空时可以捕获函数体外边的变量,举例:
        int N=100,M=10;
        auto g = [ N, &M ]( int i ) { M = 20; return N*i; }
        cout << g (10) << endl;   // 输出结果:1000
        cout<<M<<endl; // 输出结果:20
        [N,&M]含义--N按值捕获:在Lambda式内不能修改 N的值;&M按引用捕获,按引用捕获可以在Lambda表达式内修改变量的值。

        如果 [ ] 中只写 [ & ] 表示按引用方式捕获所有封闭范围内的变量;
        如果 [ ] 中只写 [ = ] 表示按值方式捕获所有封闭范围内的变量;封闭范围:指在同一{ }中的变量,但包含全局变量。
       [&,N] 含义为除变量N按照值捕获,其他变量按引用捕获,也可[=,&N],意思相反。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值