C++11 Lambda函数(匿名函数)

1、力扣1356使用了匿名函数,总结一下

 sort(arr.begin(),arr.end(),[&](int x,int y){
                                                if (bit[x] < bit[y]) {
                                                                        return true;
                                                                     }
                                                if (bit[x] > bit[y]) {
                                                                        return false;
                                                                     }
                                                return x < y;
                                            }
    );

把lambda当作一个排序的准则交给sort去排序,返回的是x < y 按照这个来排序

 

2、 Lambda表达式具体形式如下:

[capture](parameters)->return-type{body}    //  输入捕获    参数

[导入,取用外部变量,值传递还是引用传递 =  &](参数)

[...](...)mutable/throwspec  ->  retype{...}

mutable  [...]这里面的数据是不是可以被改写

throwspec    丢出异常

(1)一看到中括号开头的就是匿名函数

#include <iostream>
using namespace std;
int main()
{
    [] {
        cout << "ssss" << endl;
    };
 
}

这是一种写法,它不算是一个函数,他是一个对象,这样子写出来是没用的,没有输出

(2)后面加小括号,输出

[] {
        cout << "ssss" << endl;
    }();

 侯捷老师说不加括号相当于一个类型type,加了括号相当于创建临时对象,但是他不是创建临时对象,他是直接调用,和我们的临时对象有些不同。

(3)我们常用的写法还是下面这种

#include <iostream>
using namespace std;

int main()
{
   auto l =  [] {
        cout << "ssss" << endl;
    };
   l();
 
}

l()就是在调用,

总结 lambda就可以想象成一个函数对象,作用就像是一个function加小括号可以调用。

(4)[...](...)mutable/throwspec  ->  retype{...}

这三个只要有一个存在就必须写小括号,三个都没有,小括号可写可不写。

#include <iostream>
using namespace std;

int main()
{
    int id = 0;
   auto l =  [id]()mutable {
        cout << "id="  << id << endl;
        ++id;
    };
   l();
   l();
 
}


//id= 0
//id= 1

等同于

#include <iostream>
using namespace std;

class Functor {
private:
    int id = 0;
public:
    void operator() () {//重载运算符()
        cout << "id = " << id << endl;
        ++id;
    }
};
int main()
{
    Functor f;
    
f();
f();
    //f.operator()();
    //f.operator()();
 
}
//id= 0
//id= 1

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值