匿名函数 lambda
Posted wllwqdeai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了匿名函数 lambda相关的知识,希望对你有一定的参考价值。
[ capture_block ]( parameters ) mutable exception_specification attribute_specifier -> return_type { body };
捕捉快(capture_block):
参数(parameters):
可选项:
mutable:
exception_specification:
attribute_specifier:
return_type:
注意点:[捕捉块]、(参数)
格式:
auto basiclambda =[ ] {cout << "Hello from lambda" <<endl;}; basiclambda();
auto parameterslambda =[ ] (int value){cout << "The value is" <<value<<endl;}; parameterslambda(42);
auto returninglambda =[ ] (int a,int b){return a+b}; int sum = returninglambda(11, 22);
double data=1.23; auto capturinglambda = [data] {cout <<"Data ="<< data<<endl;};
const double data=1.23; auto capturinglambda = [data] {cout <<"Data ="<< data<<endl;};
double data=1.23; auto capturinglambda = [data]()mutable {data*=2; cout <<"Data ="<< data<<endl;};
捕捉块:
double data=1.23; auto capturinglambda = [&data] { data*=2; };
[] //未定义变量.试图在Lambda内使用任何外部变量都是错误的. [x, &y] //x 按值捕获, y 按引用捕获. [&] //用到的任何外部变量都隐式按引用捕获 [=] //用到的任何外部变量都隐式按值捕获 [&, x] //x显式地按值捕获. 其它变量按引用捕获 [=, &z] //z按引用捕获. 其它变量按值捕获
[this] //捕捉周围的对象。即使没有使用this->,也可以在lambda表达式体中访问这个对象;、
泛型lambda表达式
auto isGreaterThan100 = [ ](auto i){ return i >100;);
auto it1 = find_if(cbegin(ints), cend(ints), isGreaterThan100);
if (it1 != cend(ints)){
cout << "Found a value >100:" <<*it1 <<end1;}
lambda捕捉表达式
double pi =3.1415;
auto mylambda =[ myCapture = "pi: ",pi]{std ::cout<<myCapture<<pi;);
将lambda表达式作为参数:
void testCallback(const vector<int>& vec, const function<bool(int)>& callback)
{
for (const auto& i : vec){
if (!callback(i)){
break;
}
cout << i << "";
}
cout << endl;
}
int main(){
vector<int> vec{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
testCallback(vec, [](int i){return i < 6; });
getchar();
}
以上是关于匿名函数 lambda的主要内容,如果未能解决你的问题,请参考以下文章