c++之lambda表达式

在写代码时,我们会遇到这种代码:

sort(points.begin(),points.end(),[](const vector<int>& u,const vector<int>& v){
            return u[0] * u[0] + u[1] * u[1] < v[0] * v[0] + v[1] * v[1];
        });

我们知道sort()函数第三个参数是函数符,函数指针或者lambda表达式,而这个例子中后面一串长长的就是lambda表达式。

lambda表达式

特性:
1.使用[]替代函数名,没有声明返回类型;
2.返回类型自动推断;
3.可指定名称,比如:
auto mod3 = [](int x){return x % == 0};
4.可访问作用域内的动态变量,有两种方式:
按值访问,[变量名]
加上&,按引用访问,[&变量名]
[=]按值访问所有变量,[&]按引用访问所有;

int count13 = 0;
std::for_each(numbers.begin(),numbers.end(),[&count13](intx){count13 += x % 13 == 0});

为何使用:
使用整个lambda表达式替换函数指针或者函数符构造函数;
其定义和使用是在同一个地方进行的,不需要查看源代码,修改时也可以一目了然,同时将类似于函数的表达式用作接受函数指针或者函数符的函数的参数;

下面是一个使用例子(来自c++prime plus)

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <ctime>
const long Size = 390000L;

int main()
{
    using namespace std;
    vector<int> numbers(Size);
    srand(time(0));
    generate(numbers.begin(),numbers.end(),rand);
    cout << "sample size = " << Size << endl;

    int count3 = count_if(numbers.begin(),numbers.end(),
                          [](int x){return x % 3 == 0;});
    cout<<"count of numbers divisible by 3:" << count3 << endl;
    int count13 = 0;
    for_each(numbers.begin(),numbers.end(),
             [&count13](int x){count13 += x % 13 == 0;});
    cout<< "count of number divisible by 13:" << count13 << endl;

    count3 = count13 = 0;
    for_each(numbers.begin(),numbers.end(),
             [&](int x){count3 += x % 3 == 0;count13 += x % 13 == 0;});
    cout<< "count of number divisible by 3:" << count3 << endl;
    cout<< "count of number divisible by 13:" << count13 << endl;
    return 0;
}

这个例子主要是利用lambda表达式作为参数,判断变量是否可以被3或者13整除
代码输出:
代码输出

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值