码迷,mamicode.com
首页 > 其他好文 > 详细

lambda表达式

时间:2020-04-17 20:33:25      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:div   rds   ons   捕获变量   有一个   color   string   size_t   列表   

一个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表达式

标签:div   rds   ons   捕获变量   有一个   color   string   size_t   列表   

原文地址:https://www.cnblogs.com/cs0915/p/12722021.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!