#include<iostream>
#include<algorithm>
using namespace std;
void t_Lambda(){
// 匿名函数
// [函数对象参数] (操作符重载函数参数) mutable 或 exception 声明 ->返回值类型 { 函数体 }
// [外部变量访问方式说明符] (参数表) -> 返回值类型 { 语句 }
// △1. [函数对象参数] 必须, 只能使作用范围内可见的局部变量.
// 可以为 空、= 值传递、 & 引用传递、this、a 按值传递,不能修改 a 函数默认 const, 要修改可添加 mutable 修饰符、 &a、 a,&b a 按值 b 按引用传递、
// =,&a,&b 除 a b 外按值传递、 &,a,b 除 a b 外按引用传递.
// 2. (操作符重载函数参数) 参数, 可以省略 按值传递 如 (a, b), 按引用传递 如 (&a, &b)
// 3. mutable 或 exception 声明 可省略. 按值传递函数对象参数时, 加 mutable 修饰符可修改参数的拷贝. exception 指定函数抛出的异常, 如 throw(int)
// 4. -> 返回值类型 当返回值为 void, 或者函数体中只有一处 return 时可省略.
// △5. {函数体} 不能省略, 但可以为空.
// 例1 [=](int x, int y) -> bool { return x%10 < y%10; }
// 例2 auto ff = [=,&y,&z](int n) { cout <<x << endl; y++; z++; return n*n; };
int a[4] = {2, 11, 4, 33};
sort(a, a+4, [=](int x, int y) -> bool { return x%10 < y%10; } );
for_each(a, a+4, [=](int x) { cout << x << " ";} ); // 按个位排序: 11 2 33 4
}