概述
文章目录
- 一、Lambda表达式是什么?
- 二、程序示例
- 1. 在STL中的使用
一、Lambda表达式是什么?
Lambda表达式时C++11引入的语法,本质上是一个匿名函数,用[ ] () {}三个符号组成表达式。
格式为:[capture list] (params list) mutable exception-> return type { function body }
其中:
1:capture list为捕获外部变量列表。
2:params list表示形参列表。
3:mutable 表示是否修改捕获的变量,可选择加还是不加。
4:exception表示异常设定,一般不使用。
5:return type表示返回值类型。
6:function body 运行的函数。
该表达式在运行过程中由[capture list]先进行外部变量的捕获,捕获方法包括值传递捕获,地址传递捕获,表达式自行推导捕获。
值传递捕获:
int a = 10;
[a](){return a/2; };
cout << "a=" << a <<
endl;
a=10
发现无论怎么处理变量和函数,都无法更改a的值。
但是我们给lambda表达式赋一个auto类型的变量,然后可以用函数调用的方式去调用这个auto变量,返回值类型为int,就可以实现c=a/10的功能。
所以由此可以看出,lambda表达式本质上就是一个函数,如果形参列表()为空,就表明为无参函数。对无参的lambda表达式表达式来讲。
int a = 10;
//返回类型为int,故在调用b()可以用int类型接收
auto b = [a]()->int {return a / 10; };
int c = b();
cout << "c=" << c << endl;
c=1
地址传递捕获
int a = 10;
int b = 10;
//a以值捕获,b以地址捕获
auto c = [a,&b]()->int{b = a+b; return b; };
int d = c();
cout << "d=" << d << endl;
d=20
自行推导捕获
[=] 表示用值传递的方式捕获所有变量。
[this] 捕获所在类内的this指针。
二、程序示例
1. 在STL中的使用
//以引用和值传递的方式给容器赋值,算法采用generate
generate(v.begin(), v.end(), [i, &j]() {
j= i + j;
return j;
});
//以地址传递的方式遍历容器的值,同时按照x = x * i+ j的公式更改容器的值。
for_each(v.begin(), v.end(), [=](int &x) {
x = x * i+ j;
cout << "x=" << x << endl;
});
//实现降序排列
sort(v.begin(), v.end(), [](const int& a,const int& b){return a>b;});
最后
以上就是烂漫小蝴蝶为你收集整理的C++总结笔记(十一)—— Lambda表达式的应用一、Lambda表达式是什么?二、程序示例的全部内容,希望文章能够帮你解决C++总结笔记(十一)—— Lambda表达式的应用一、Lambda表达式是什么?二、程序示例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复