匿名函数 = 没有名字、临时用一次的小函数
专门写给 for_each 、 transform 、sort 这种算法用。
cpp格式:
[捕获] (参数) -> 返回值 { 函数体 }
- [] 捕获:要不要用外面的变量?
- [] :啥外部变量都不用
- [=] :用外面所有变量,拷贝进来,不能改
- [&] :用外面所有变量,引用,能直接改
- [a, &b] :只捕获 a(拷贝)、b(引用)
最简单记:
- 只读用 [=]
- 要改外面变量用 [&]
- (int x) 参数
和普通函数一样:
cpp
(int x) // 传入一个 int
(int a, int b)// 传入两个
() // 没参数
- -> int 返回值
简单场景可以不写,编译器自动推。
cpp
// 自动推返回 int
[](int x) { return x * 2; }
// 显式写(复杂逻辑才需要)
[](int x) -> int { return x * 2; }
- 最通俗例子对比
普通函数(有名字)
cpp
int add2(int x) {
return x + 2;
}
匿名函数(没名字)
cpp
[](int x) {
return x + 2;
}
功能完全一样,只是少了名字。
- 结合你刚才的算法(秒懂)
cpp
vector<int> v = {1,2,3};
// for_each:只做事,不返回
for_each(v.begin(), v.end(), [](int x) {
cout << x;
});
// transform:加工、返回新值
transform(v.begin(), v.end(), v.begin(), [](int x) {
return x * 2;
});
终极口诀(主人背这个就够)
- [] 管能不能用外面变量
- () 管传什么参数
- {} 里写要干啥
- 简单场景不用写返回值