C++11特性--Lambda函数
来源:互联网 发布:银河铁道之夜 知乎 编辑:程序博客网 时间:2024/06/06 20:06
1.Lambda函数
*对于接受函数指针或函数符的函数,可以用匿名定义(lambda)作为其参数。
*仅当Lambda表达式完全由一条返回语句组成时,自动类型推断才管用,否则需要使用新增的返回类型后置语法
*当没有返回值时,推断为void
Example:
[](int x){ return x%2==1;}
解析:
[]代替了函数名,这里自动推断出返回类型为bool,上面语句等效于
[](int x)->bool{ return x%2==1;}
int main()
{
vector<int> vec{1,2,3};
int count=count_if(vec.begin(),vec.end(),[](int x)->bool{ return x%2==1;});
cout<<count<<endl;//2
return 0;
}
*可以给lambda指定一个名称
Example:
int main()
{
auto pf = [](int x)->bool{ return x%2==1;};
vector<int> vec{1,2,3};
int count=count_if(vec.begin(),vec.end(),pf);
cout<<count<<endl;//2
return 0;
}
*可以像使用常规函数那样使用有名称的lambda
Example:
int main()
{
auto pf = [](int x)->int{ return x%2;};
cout<<pf(3)<<endl;//1
return 0;
}
*lambda可以访问作用域内的任何动态变量:要捕获要使用的变量,可将名称放在[]内
[var]:按值访问变量var
[&var]:按引用访问变量var
[&]: 按引用访问作用域内所有动态变量
[=]: 按值访问作用域内所有动态变量
还可以混合使用两种方式
[&,var]:按引用访问作用域内所有动态变量,按值访问变量var
.......
Example:
int main()
{
int cnt1=0,cnt2=0;
vector<int> vec{1,2,3};
for_each(vec.begin(),vec.end(),[&cnt1](int x){ cnt1+= x%2==1;});
cout<<cnt1<<endl;//2
cnt1=0;
for_each(vec.begin(),vec.end(),[&](int x){ cnt1+= x%2==1; cnt2+= x%2==0;});
cout<<cnt1<<ends<<cnt2<<endl;//2 1
return 0;
}
*对于接受函数指针或函数符的函数,可以用匿名定义(lambda)作为其参数。
*仅当Lambda表达式完全由一条返回语句组成时,自动类型推断才管用,否则需要使用新增的返回类型后置语法
*当没有返回值时,推断为void
Example:
[](int x){ return x%2==1;}
解析:
[]代替了函数名,这里自动推断出返回类型为bool,上面语句等效于
[](int x)->bool{ return x%2==1;}
int main()
{
vector<int> vec{1,2,3};
int count=count_if(vec.begin(),vec.end(),[](int x)->bool{ return x%2==1;});
cout<<count<<endl;//2
return 0;
}
*可以给lambda指定一个名称
Example:
int main()
{
auto pf = [](int x)->bool{ return x%2==1;};
vector<int> vec{1,2,3};
int count=count_if(vec.begin(),vec.end(),pf);
cout<<count<<endl;//2
return 0;
}
*可以像使用常规函数那样使用有名称的lambda
Example:
int main()
{
auto pf = [](int x)->int{ return x%2;};
cout<<pf(3)<<endl;//1
return 0;
}
*lambda可以访问作用域内的任何动态变量:要捕获要使用的变量,可将名称放在[]内
[var]:按值访问变量var
[&var]:按引用访问变量var
[&]: 按引用访问作用域内所有动态变量
[=]: 按值访问作用域内所有动态变量
还可以混合使用两种方式
[&,var]:按引用访问作用域内所有动态变量,按值访问变量var
.......
Example:
int main()
{
int cnt1=0,cnt2=0;
vector<int> vec{1,2,3};
for_each(vec.begin(),vec.end(),[&cnt1](int x){ cnt1+= x%2==1;});
cout<<cnt1<<endl;//2
cnt1=0;
for_each(vec.begin(),vec.end(),[&](int x){ cnt1+= x%2==1; cnt2+= x%2==0;});
cout<<cnt1<<ends<<cnt2<<endl;//2 1
return 0;
}
- C++11特性--Lambda函数
- C++11新特性之Lambda函数
- C++11的新特性 Lambda 函数
- C++11新特性-lambda函数
- 【C++】C++11特性:lambda和function
- C++11新特性:Lambda函数(匿名函数)
- C++11新特性:Lambda函数(匿名函数)
- C++11新特性:Lambda函数(匿名函数)
- C++11新特性:Lambda函数(匿名函数)
- C++11新特性:Lambda函数(匿名函数)
- C++11新特性:Lambda函数(匿名函数)
- C++11 新特性之Lambda函数(匿名函数)
- C++11新特性:Lambda函数(匿名函数)
- C++11新特性:Lambda函数(匿名函数)
- C++11新特性:Lambda函数(匿名函数)
- C++11新特性:Lambda函数(匿名函数)
- C++11新特性:Lambda函数(匿名函数)
- C++11新特性:Lambda函数(匿名函数)
- 程序员究竟还需要读书么?
- C++11特性--新的类功能--特殊的成员函数(移动构造函数,移动赋值运算符),默认方法和禁用方法(default,delete),委托构造函数,管理虚方法(override,final)
- OLAP技术介绍
- ListView嵌套Button
- OC-0724学习总结
- C++11特性--Lambda函数
- Android_SQLite数据库详解
- Merge Sort and Inversion
- NGUI UICamera属性介绍
- 亚信java笔试题
- 为什么你应该(从现在开始就)写博客
- arm+linux 裸机环境搭建之安装工具篇(gcc与gdb)
- C++ 函数总结(调用+函数+变量)
- C++指针总结