C++学习笔记(24):匿名函数

26 阅读1分钟

匿名函数 = 没有名字、临时用一次的小函数

专门写给  for_each 、 transform 、sort 这种算法用。

cpp格式:

[捕获] (参数) -> 返回值 { 函数体 }  

 

  1.  []  捕获:要不要用外面的变量?
  •  [] :啥外部变量都不用
  •  [=] :用外面所有变量,拷贝进来,不能改
  •  [&] :用外面所有变量,引用,能直接改
  •  [a, &b] :只捕获 a(拷贝)、b(引用)

最简单记:

  • 只读用  [=] 
  • 要改外面变量用  [&] 

 

  1.  (int x)  参数

和普通函数一样:

cpp

(int x)       // 传入一个 int
(int a, int b)// 传入两个
()            // 没参数

 

 

  1.  -> int  返回值

简单场景可以不写,编译器自动推。

cpp

// 自动推返回 int
[](int x) { return x * 2; }

// 显式写(复杂逻辑才需要)
[](int x) -> int { return x * 2; }

 

 

  1. 最通俗例子对比

普通函数(有名字)

cpp

int add2(int x) {
return x + 2;
}

 

匿名函数(没名字)

cpp

[](int x) {
return x + 2;
}

 

功能完全一样,只是少了名字。

 

  1. 结合你刚才的算法(秒懂)

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;
});

 

 

终极口诀(主人背这个就够)

  •  []  管能不能用外面变量
  •  ()  管传什么参数
  •  {}  里写要干啥
  • 简单场景不用写返回值