首页 / C++ / c++ lambda function
c++ lambda function
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c++ lambda function,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2567字,纯文字阅读大概需要4分钟。
内容图文
![c++ lambda function](/upload/InfoBanner/zyjiaocheng/593/55b6d88c7e1540e0a38411b1d98bf352.jpg)
1.概述
考虑最简单的lambda function , [](){}
,它没有参数也没有返回值。
[]
里面用来捕获函数外部的变量,而()
里面就是匿名函数的参数,{}
里面就是函数的执行代码。
One easy example:
#include <iostream>
using namespace std;
int main()
{
auto func = [] () { cout << "Hello world"; }; //定义了一个lambda funciton
func(); // now call the function
}
2. lambda 表达式
形如: [capture](parameters)->return-type{body}
如果没有参数的话 ()
可以省略,返回值也可以省略。
Several easy examples:
[](int x, int y) { return x + y; } // 隐式返回类型
[](int& x) { ++x; } // 没有return语句 -> lambda 函数的返回类型是'void'
[]() { ++global_x; } // 没有参数,仅访问某个全局变量
[]{ ++global_x; } // 与上一个相同,省略了()
3 .lambda 函数中的变量截取
Lambda函数可以引用在它之外声明的变量. 这些变量的集合叫做一个闭包. 闭包被定义在Lambda表达式声明中的方括号[]内. 这个机制允许这些变量被按值或按引用捕获.下面这些例子就是:
[] //不截取任何变量,试图在Lambda内使用任何外部变量都是错误的(全局变量除外).
[&] //截取外部作用域中所有变量,并作为引用在函数体中使用
[=] //截取外部作用域中所有变量,并拷贝一份在函数体中使用
[=, &foo] //截取外部作用域中所有变量,并拷贝一份在函数体中使用,但是对foo变量使用引用
[bar] //截取bar变量并且拷贝一份在函数体重使用,同时不截取其他变量
[this] //截取当前类中的this指针。如果已经使用了&或者=就默认添加此选项。
-----------------------------
[x, &y] //x 按值捕获, y 按引用捕获.
[&, x] //x显式地按值捕获. 其它变量按引用捕获
[=, &z] //z按引用捕获. 其它变量按值捕获
4 .lambda函数与STL结合
常用举例1:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
typedef pair<int,int> PII;
int main()
{
vecetor<PII>p;
//假设p数组中已经有了数据,现在我们要对其根据PII的第二个值从大到小排序
sort(p.begin(), p.end(), [](PII a, PII b){
return a.second > b.second;
});//如此编写调用lambda函数即可。
return 0;
}
常用举例2:
lambda函数的引入为STL的使用提供了极大的方便。比如下面这个例子,当你想便利一个vector的时候,原来你得这么写:
vector<int> v;
v.push_back( 1 );
v.push_back( 2 );
//...
for ( auto itr = v.begin(), end = v.end(); itr != end; itr++ )
{
cout << *itr;
}
现在有了lambda函数你就可以这么写
vector<int> v;
v.push_back( 1 );
v.push_back( 2 );
//...
for_each( v.begin(), v.end(), [] (int val)
{
cout << val;
} );
而且这么写了之后执行效率反而提高了。因为编译器有可能使用”循环展开“来加速执行过程(计算机系统结构课程中学的)
5 . References:
https://blog.csdn.net/xiaoguyin_/article/details/79798362
https://www.cnblogs.com/pzhfei/archive/2013/01/14/lambda_expression.html
https://www.cnblogs.com/lidabo/p/3908663.html
内容总结
以上是互联网集市为您收集整理的c++ lambda function全部内容,希望文章能够帮你解决c++ lambda function所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。