lambda函数(表达式)
1. 概念
- C++11中的lambda表达式用于定义和调用匿名函数
- lambda函数又称为lambda表达式
当某个函数比较短小且只需要调用一次时,可以定义为lambda函数。
2. 语法格式
-
- eg:
[](int a, int b)->int{return a + b;}(1, 2);
- eg:
- 当函数体中没有return语句或者只有一个return语句时,” ->返回值类型 “可以省略,因为编译器可以自动推导。
- 当函数体中没有使用形参时,”(形式列表)”可以省略
- []{cout << “hello world”<< endl;}();
3. 访问动态变量
- lambda函数内部可以访问作用域内任何动态变量,要捕获要使用的变量,可将名称的相关形式放在中括号内。
- eg:
[c](int a, int b){return a +b+c;}
- eg:
- 具有如下几种形式及其混合形式: | [z] | 按值访问变量z | | —- | —- | | [&z] | 按引用访问变量z,若在函数内部改变z的值,则它的外面也跟着改变 | | [&] | 按引用访问所有动态变量 | | [=] | 按值访问所有动态变量 | | [ted, &ted1] | 按值访问ed和按引用访问ed1 | | etc…… | |
4. 常用场景
- 用作通用算法的函数型参数
- 通讯处理函数的传参(实参)
5. 示例代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int r = 0;
r = [](int a, int b)->int{return a + b;}(1, 2);
cout << "r = " << r << endl;
r = [](int a, int b){return a + b;}(3, 4);
cout << "r = " << r << endl;
[]{cout << "hello lambda" << endl;}();
vector<int> intVector{9, 5, 2, 7};
for_each(intVector.begin(), intVector.end(),
[](int a){cout << a << " ";});
cout << endl;
sort(intVector.begin(), intVector.end(), [](int a, int b){return a > b;});
for_each(intVector.begin(), intVector.end(),
[](int a){cout << a << " ";});
cout << endl;
return 0;
}