lambda函数的完整形式:[captures](params) -> return_type { body }
[变量捕获方式][参数列表]->返回值类型{代码块}
lambda函数单独使用的时候必须赋值给auto类型的变量
举个例子:
#include<iostream>
int main(){
//lambda函数单独使用的时候必须赋值给auto类型的变量
auto add=[](int x,int y)->int{return x+y;};
std::cout<<add(10,5);
}
如果没有返回值,那么“->reture_type”部分可省略不写
举个例子
#include<iostream>
int main(){
auto show=[](int x){std::cout<<x<<" ";};
for(int i=0;i<10;i++){
show(i);
}
}
captures里面可以放"="或"&",也可以不写
"="是以值传递的方式捕获变量放到参数列表中
“&”是以引用的方式捕获变量放到参数列表中
#include<iostream>
#include <algorithm>
int main(){
int nums[10]={1,2,3,4,5,6,7,8,9,10};
//以值传递的方式捕获nums[0]、nums[1]...nums[9]到参数x中
std::for_each(nums,nums+10,[=](int x){std::cout<<x<<" ";});
std::cout<<std::endl;
//以引用的方式捕获nums[0]、nums[1]...nums[9]到参数x中
std::for_each(nums,nums+10,[&](int &x){x++;});
for(int i=0;i<10;i++){
std::cout<<nums[i]<<" ";
}
}
capture里面可以放外部变量
#include<iostream>
int main(){
int count=0;
char*str="Hello Lambda!";
auto str_count=[&count](char*str){
for(int i=0;str[i]!='\0';i++)
count++;
};
str_count(str);
std::cout<<count;
}
capture里面可以混合使用
int main(){
int total=0,count=0;
int nums[10]={1,1,1,1,1,1,1,1,1,1};
int size=10;
//[=,&count,&total]表示除了count和total是引用,
//其他参数都是值传递。
auto sum=[=,&count,&total](int nums[],int size){
for(int i=0;i<size;i++){
total+=nums[i];
count++;
}
};
sum(nums,size);
std::cout<<"数组之和为:"<<total<<std::endl;
std::cout<<"数组元素个数为:"<<count<<std::endl;
std::cout<<"size:"<<size<<std::endl;
std::cout<<"nums数组:"<<std::endl;
for(int i=0;i<size;i++){
std::cout<<nums[i]<<" ";
}
}