Mr Loser

Lambda表达式是个好东西

2019-07-21 17:35:02


0000 前言

作者接触Lambda表达式是在Javascript中。它是这么写的:

()=>{
    //Do sth. ...
}

用着非常方便,比传统方式少写了几个字母

0001 环境要求

Lambda表达式在C++11及以上版本中被支持。所以,编译器需要开启C++11。不同的IDE开启方式有所不同,总之就是在编译命令后加上一句-std=c++11

0010 浅析作用

Lambda表达式会创建一个匿名函数,你没必要也不可以给这个函数命名。经常用到的地方如sort的cmp,或是给一个函数指针赋初值等。它的好处显而易见,这个函数不占用你的命名空间。比如说你经常使用sort函数,每次都要定义一个不同的cmp,那么你的程序将是这样的:

bool cmp1(...){...}
bool cmp2(...){...}
bool cmp3(...){...}
...
bool cmpn(...){...}

这一堆cmp令人眼花缭乱,不好管理,让你恨不得把电脑砸了。

如果你用Lambda表达式,就是另一个样子了:你不需要定义这么多cmp,每次调用sort的时候只要把第三个参数替换成Lambda表达式就可以了。就像这样:sort(...,...,Lambda表达式);

0011 初步引入

Lambda表达式最基本的写法如下:

[](形式参数表){
    函数主体(可以返回值)
}

它会返回一个匿名函数,功能和传统定义的函数是一样的。

这样,上面的sort就可以写成如下形式:

sort(
    ...,
    ...,
    [](Type x,Type y){
        //照cmp的写法写
    }
)