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表达式的主要内容,如果未能解决你的问题,请参考以下文章