首页 > 其他分享 ><八>lambda表达是应用实践

<八>lambda表达是应用实践

时间:2022-12-08 23:12:59浏览次数:37  
标签:表达 int return 实践 queue DataType ma include lambda

既然lambda表达式只能使用在语句中,如果想跨语句使用之前定义好的lambda表达式,怎么办?用什么类型来表示lambda表达式?
用function类型来表示函数对象类型

bind1st/bind2nd bind 绑定器返回的都是 函数对象

lambda表达式=>函数对象

示例1

map<int , function<int(int,int)>>  caculateMap;
caculateMap[1]=[](int a ,int b)->int{return a+b;}
caculateMap[2]=[](int a, int b)->int{return a-b;}
caculateMap[3]=[](int a, int b)->int{return a*b;}
caculateMap[4]=[](int a, int b)->int{return a/b;}

int choice=1;//算法模式选择

cout<<"10+15"<<caculateMap[choice](10,15)<<endl;

示例2 智能指针自定义删除器

#include <iostream>
#include <string>
#include <memory>
#include <functional>
using namespace std;

int main(){


    unique_ptr< FILE, function<void(FILE *)> > upr(fopen("1.txt","W"),[](FILE * file){fclose(file);}) ;


    return 0;
}

关于优先队列代码

#include <iostream>
#include <string>
#include <memory>
#include <functional>
#include <queue>
using namespace std;

class DataType{

public:
   DataType(int _ma,int _mb):ma(_ma),mb(_mb){}

   bool operator >(const DataType & _data)const {return _data.ma> ma ;}
   bool operator <(const DataType & _data)const {return _data.ma< ma ;}
private:
   int ma;
   int mb;

};


int main(){

     priority_queue<DataType> queue;

     queue.push(DataType(10,20));
     queue.push(DataType(15,15));
     queue.push(DataType(20,20));

     system("pause");
     return 0;
}

上面代码对于优先队列,需要在自己的数据类型中定义 >  < , 上面的写法功能性上,OK,没有问题
但是,如果在DataType中写好了operator> operator< 函数,那么对于DataType的比较方式就固定了,不够灵活

可以借助lamabda来优化如下



#include <iostream>
#include <string>
#include <memory>
#include <functional>
#include <queue>
using namespace std;

class DataType{

public:
   DataType(int _ma,int _mb):ma(_ma),mb(_mb){}
   int ma;
   int mb;

};


int main(){


     using pfunciton=function< bool(DataType &d1, DataType &d2)>;
     
     // priority_queue 的构造函数支持传入一个函数对象,那么就把比较大小的 lambad 作为函数对象传入,
     // 这样比较的算法就不用固定写在DataType类中了,更加灵活
     priority_queue<DataType,vector<DataType>,pfunciton> queue([](DataType &d1, DataType &d2)->bool {return d1.ma>d2.ma ;});

     queue.push(DataType(10,20));
     queue.push(DataType(15,15));
     queue.push(DataType(20,20));

     system("pause");
     return 0;
}

标签:表达,int,return,实践,queue,DataType,ma,include,lambda
From: https://www.cnblogs.com/erichome/p/16967425.html

相关文章

  • 正则表达式
    正则表达式#私藏项目实操分享#//varreg=/(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1......
  • Jenkins 定时任务cron表达式
    crontab表达式Jenkins中cron表达式相对于传统的cron表达式稍微复杂那么一点点,多个一个HH表示hash值可以理解成随机值,假如H在分位上面表示(0-60)之间取随机值,第一次ha......
  • 不背锅运维-实践笔记:Oracle表按天分区
    1.手动分区实践手动分区的实践,本文的仅拿Zabbix的TRENDS表作为讲解,要对其他表做分区,是一样的套路。还有,在做这些操作前,请停止上层应用(Zabbix),如果是线上环境,请在合规的......
  • <七>lambda表达式实现原理
    C++11函数对象的升级版=>lambda表达式函数对象的缺点:使用在泛型算法,参数传递,比较性质/自定义操作优先级队列,需要专门定义出一个类//lambda表达式语法://[捕获......
  • ASP.NET Core缓存Redis最佳实践+分布式Session+单点登录(SSO)
    《ASP.NETCore分布式缓存RedisLock分布锁最佳实践》1、JMeter模拟高并发工具简单入门使用2、redis分布式锁介绍3、高并发扣减库存带来的问题与思考4、netcore基于StackE......
  • GitOps实践之kubernetes安装argocd
    1.什么是argocd1.ArgoCD是Kubernetes的一个声明性GitOps持续交付工具。2.应用程序定义、配置和环境应该是声明性的和版本控制的。应用程序部署和生命周期管理应自动化......
  • 蜻蜓:GitLab结合fortify实现自动化代码扫描实践
    一、背景在甲方做安全的同学可能会有一项代码审计的工作,通常需要从gitlab把代码拉取下来,然后使用代码审计工具进行扫描,然后对结果进行人工确认;在这个流程中需要做的事情比......
  • js 正则表达式
     创建正则两种方式字面量创建正则constr=/test/;对象创建正则letr1=newRegExp("test")调用正则的test方法判断是否符合规则返回true或falseconsole.log(r.test('test')......
  • Java单例模式的最佳实践?
    “读过书,……我便考你一考。茴香豆的茴字,怎样写的?”——鲁迅《孔乙己》0x00大纲目录0x00大纲0x01前言0x02单例的正确性new关键字clone方法克隆反序列化反射0x03最......
  • 百度爱番番基于图技术、流式计算的实时CDP建设实践
    导读:随着营销3.0时代的到来,企业愈发需要依托强大CDP能力解决其严重的数据孤岛问题,帮助企业加温线索、促活客户。但什么是CDP、好的CDP应该具备哪些关键特征?本文在回答此问......