lambda表达式

Posted cs0915

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lambda表达式相关的知识,希望对你有一定的参考价值。

一个lambda表达式表示一个可调用的代码单元,可以理解为一个未命名的内联函数。与函数类似,一个lambda具有一个返回类型、一个参数列表和一个函数体,但与函数不同,lambda可能定义在函数内部。

形式:[capture list](parameter list)->return type{function body}

capture list:lambda表达式所在函数中定义的局部变量列表,可以为空。通过捕获列表来捕获变量,多个变量用逗号隔开,在其函数体中即可使用这些变量。

parameter list、return type、function body与普通函数一样。

对于不是捕获的变量,函数体内也可以直接使用定义在当前函数之外的名字,只要其作用域也在lambda内。

lambda的调用方式与普通函数一样,使用调用运算符()

lambda不能有默认参数

auto f=[]{return 42;}//定义了一个可调用对象

cout<<f()<<endl;//调用
sort(vec.begin(),vec.end(),[](const string& a,const string& b)
                                            {return a.size()<b.size();});
//sort排序,对于容器中的每个元素都调用一次lambda表达式来进行长度排序
1 void biggies(vector<string>& words,vector<string>::size_type sz)
2 {
3   auto w=find_if(words.begin(),words.end(),
4                          [sz](const string& a){return a.size()>=sz;});       
5  //如果在words中找到某个值的size为sz,则返回指向它的迭代器,否则返回words.end(),如果没有进行捕获,则不能直接使用sz
  //find_if接受一元谓词,所以传递给find_if的可调用对象必须接受单一参数。所以通过lambda捕获的方式来获取另一个变量sz
6 }

 

以上是关于lambda表达式的主要内容,如果未能解决你的问题,请参考以下文章

JAVA由一个将JSONArray转成Map的需求引发的lambda语法的学习

函数式编程

C# fun

Lambda表达式

Lambda表达式

Lambda表达式常用代码示例