cout << "=================lambda================" << endl;
lambda:一个lambda表达式表示一个可调用的代码单元。可以理解为内联函数
auto fun = [](auto num) {cout << num << endl; };
fun(7);
auto fun1 = [](auto num) {return num + num; };
auto fun1 = [](auto num)->double {return num + num; };//可以使用->的方式指定返回类型
auto dounum = fun1(7);
cout << dounum << endl;
lambda的隐式捕获
=:以值得方式捕获,在同时使用=和显示捕获的时候,显示捕获前必须要使用&
&:以引用的方式,同时使用&和显示捕获时,显示捕获前不能使用&。
显示捕获默认是将变量拷贝,如果使用了&就变成了引用捕获,除了&捕获,其他方式捕获的变量时不能被修改的。
cout << "==================一些配合的算法=================" << endl;
vector<int> vec{ 9,8,7,6,5,4,3,2,1,0 };
int sz = 7;
auto chsz = [&]() {++sz; };
chsz();
用find_if返回第一个不满足条件的指针,true的时候find_if会结束
auto wc = find_if(vec.begin(), vec.end(), [sz](const int& num) {return num < sz; });
cout <<"*wc = " << *wc << endl;//输出7
使用for_each遍历容器
for_each(vec.begin(), vec.end(), [](const int& num) {cout << num << " "; });
cout << endl;
使用stable_sort对容器元素排列
stable_sort(vec.begin(), vec.end(), [](const int& num1, const int& num2) {return num1 < num2; });
show(vec);
bind绑定函数和参数,bing支持参数占位,会在参数列表中寻找,使用占位时要用std::placeholders命名空间
auto binfun = [](int x, int y,int z,int w) {cout << "x = " << x << " y = " << y << endl;
cout << "z = " << z << " w = " << w << endl; };
int aa(10);
int bb(20);
int cc(30);
int dd(40);
auto bindgun = bind(binfun, aa, bb,_2,_1);
bindgun(cc, dd);