Lambda表达式
C++11的一大特性就是引入了Lambda表达式,并在后续的C++14进行了加强。
利用Lambda表达式,可以方便定义和创建匿名函数。
一个Lambda表达式表示一个可调用单元,我们可以将其理解为一个未命名的内联函数。
Lambda语法定义
[capture list] (paramters list) mutable exception-> return type{
function body}
其中——
- capture list,捕获外部变量列表;
- paramters list,形参列表;
- mutable,用来说明是否可以修改捕获的外部变量;
- exception,抛出异常;
- return type,返回类型;
- function body,函数体。
除此之外,还可以缺省部分声明构成不完整的Lambda表达式,常见的有以下几种——
序号 | 格式 |
---|---|
1 | [capture list] (params list) -> return type {function body} |
2 | [capture list] (params list) {function body} |
3 | [capture list] {function body} |
其中——
- 格式1省略了mutable关键字和exception,声明的是一个const类型的表达式,这种表达式不能修改捕获列表中的值;
- 格式2 省略了返回类型return type,但是编译器可以根据functionbody中的return语句推断出Lambda表达式的返回类型,如果没有return语句,默认为void类型;
- 格式3中省略了参数列表,即无参的Lambda表达式。
举个使用Lambda表达式的例子——
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
vector<int> v{
12,52,67,87,34,95,16,48};
//使用格式3的Lambda表达式定