c++泛型算法的定制操作和lambda表达式

it2025-06-23  11

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

最新回复(0)