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

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值