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

如何使用匿名函数 (lambda) 复制此代码?

匿名函数-lambda

Python中的匿名函数——lambda函数

匿名函数lambda python

Python 函数进阶-lambda匿名函数和三元运算符

匿名函数lambda