C定义使用函数对象的算法,理解函数对象如何作用于迭代器
定义一个对容器全部元素执行某种算术运算的算法,使用的某种算术运算使用函数指针或函数对象来定义,全部元素的遍历使用迭代器。实质就是对STL算法accumulate的模拟实现,该算法定义在头文件中。
使用函数指针或函数对象做函数参数,调用时,相当于将函数指针指向的代码或类定义的operator()()定义的代码嵌入到函数中,让函数体中的一段代码可以让任意的代码逻辑来替换,从而让函数更灵活,更通用,也更稳定。(使用函数指针的函数如果称为主体函数,主体函数通过函数指针或函数对象调用的函数称为回调函数,某一函数调用主体函数时,可以随意定义回调函数,从而构成了一对多(一个主体函数,任意多个回调函数)的关系。)templateclassInputIterator,classT,classBinaryOperationBinaryOperation提供运算逻辑Taccumulate(InputIteratorfirst,InputIteratorlast,Tinit,BinaryOperationbinaryop)使用函数指针或函数对象{while(first!last){initbinaryop(init,first);调用函数指针,binaryop的参数是accumulate提供的参数first;}returninit;}
在上面函数accumulate的形参列表中,使用了函数指针或函数对象参数,函数指针或函数对象在函数体中使用时,使用的参数也是函数accumulate的参数。
accumulate调用时,如果使用的是函数指针,直接引用函数名即可:intmult(inta,intb){returnab;}accumulate(A,AN,1,mult);将函数mult传递给通用算法
accumulate调用时,如果使用的是函数对象,其实参是一个类对象:classmultclass{public:intoperator()(intx,inty)const{returnxy;}};accumulate(A,AN,1,multclass());调用默认构造函数生成一个匿名对象匿名对象在accumulate函数体中调用operate()()
完整democode:includeiostreamincludenumeric定义accumulate()的头文件usingnamespacestd;templateclassInputIterator,classTTaccumulate(InputIteratorfirst,InputIteratorlast,由first与last提供操作区间Tinit)init提供初始值{while(first!last){遍历first和last构成的区间initinitfirst;不使用函数指针,如果要使用乘操作,需要更改运算符first;迭代器前移}returninit;}templateclassInputIterator,classT,classBinaryOperationBinaryOperation提供运算逻辑Taccumulate(InputIteratorfirst,InputIteratorlast,Tinit,BinaryOperationbinaryop)使用函数指针或函数对象{while(first!last){initbinaryop(init,first);调用函数指针,binaryop的参数是accumulate提供的参数如果使用函数对象,bionaryop就是一个匿名对象,由其调用operator()(init,first)first;}returninit;}intmult(inta,intb){returnab;}classmultclass{public:intoperator()(intx,inty)const{returnxy;}};voidmain(){intA〔〕{1,2,3,4,5};constintNsizeofAsizeofA;coutTheresultbyaddingallelementsinAisaccumulate(A,AN,0)使用默认运算逻辑(使用默认运算逻辑(加法)endl;coutTheresultbymultiplingallelementsinAisaccumulate(A,AN,1,multclass())调用默认构造函数生成一个匿名对象(使用函数对象传递运算逻辑)endl;coutTheresultbymultallelementsinAisaccumulate(A,AN,1,mult)将函数mult传递给通用算法(使用函数指针传递运算逻辑)endl;getchar();}TheresultbyaddingallelementsinAis15(使用默认运算逻辑(加法)TheresultbymultiplingallelementsinAis120(使用函数对象传递运算逻辑)TheresultbymultallelementsinAis120(使用函数指针传递运算逻辑)
End
大海作文450字大海,是地球最蔚蓝的名字,傍晚,我独自一人躺在沙滩上。慢慢的,我将自己的双脚放入大海,接受著大海的礼遇。海,也不负朋友之情,轻轻的、柔柔的拍打著我的双腿;轻轻的、柔柔的触动我的……
golang2021流程控制(11)switch高级switch的使用的注意事项和细节1)caseswitch后是一个表达式(即:常量值、变量、一个有返回值的函数等都可以)2)case后的各个表达式的值的数据类型,必……
秋桂三年级作文今天,是一个天气晴郎的秋天,今天老师要带我们去观察桂花树,真是令人高兴啊!你想知道我们是怎样找到桂花树的吗?那我来告诉你吧!我们很远很远就闻到了一股淡淡的清香味了!接着,……
时间征文时间都去哪了童年,是熹微的晨光,是夜晚的小星,是垄上的幼芽。七彩的童年回荡着无数欢声笑语hellip;hellip;今日,我即将重温旧梦,在记忆茫茫的长河中追寻我的心声。mdash;mda……
人民财评侵害用户权益的APP必将淡出江湖来源:人民网针对APP违规索取权限、开屏弹窗信息骚扰用户等问题进行回头看,工业和信息化部近日连续发布通报,67款APP未按时限要求完成整改进行下架;尚有210款APP未按……
描写可爱泰迪狗的作文泰迪狗又称为贵宾犬,描写可爱泰迪狗的作文怎么写?相信很多人都想知道吧?以下是小编为您整理的描写可爱泰迪狗的作文相关资料,欢迎阅读!描写可爱泰迪狗的作文1在放学的路上,妈妈……
阳光总在风雨后的作文范文800字阳光总在风雨后作文800字我钟爱雨后的天空,我坚信心中的彩虹总会在风雨后飞扬!阳光总在风雨后。雪莱说过:冬天来了,春天还会远吗?我能够说:风雨来了,阳光还会远吗?有……
烟花的春节今天是春节。晚上,我们全家坐在客厅里观看春节联欢晚会。这时,听到好多炮响声,我想:春节的钟声还没敲响呢,都放鞭炮啦?我跑到窗口旁边,往外看,原来是在放烟花啊。你看,天上正在绽放……
徒满天下三年级作文我喜欢画画,其中最喜欢画漫画。我把我喜欢的漫画和看书结合在一起,自己编稿,自己画画,已经画了整整6本,每本都非常精彩!我有很多粉丝,同学们经常缠着我排队看我的漫画,其中也……
阿里滴滴公布最新组织架构大调整背后有哪些管理思考?阿里和滴滴分别公布了最新的组织架构和战略布局调整,这次调整都聚焦在高管任命和新业务布局两方面。今年是不平凡的一年,从年初开始新冠疫情就影响着每个行业,有的企业业绩下滑甚至……
母亲节的礼物作文四篇导语:今天就是母亲节了,是妈妈的节日。我决定要送给妈妈一份特别的礼物。因为妈妈今年36岁,所以决定送给妈妈36枝康乃馨,祝福妈妈。小编收集母亲节的礼物作文,欢迎阅读。第一……
联想官方霸气官宣!骁龙898旗舰手机性能超乎想象大火龙再升级【8月29日讯】导语,随着小米、荣耀等多家国产手机厂商相继发布了搭载骁龙888PLus处理器的旗舰机型之后。也让很多网友们对于全新一代的高通骁龙898处理器,有了更多的期待,因……
圣战(5)圣皇连忙招呼道:ldquo;快快免礼!rdquo;皇帅继续说道:ldquo;圣皇,您大可放心,我们已经派十万大军去支援东城门和西城门了!我方定会取得胜利!ldquo;圣皇……
作文微笑每一天清晨,我早早起了床,拉开窗帘,打开窗户,让清新的空气走进我一天的生活。不经意间,一轮朝阳已经从地平线下跳了了出来,转瞬间,周围一下明亮了起来,太阳像一个红色的圆印在一张白……
我爱冬天的雪的8篇作文导语:以下是小编整理的关于我爱冬天的雪的作文,内容如下,以供参考:【篇一:我爱冬天的雪作文】我爱冬天,但我更爱冬天漫天飞舞的雪。雪你洁白如玉,玉洁冰精。你冻结了世间……
给山区孩子的一封信山区的孩子们:你们好!我是读在215;215;学校215;班215;215;215;学生。前几天,我在电视上看到了你们那瘦弱的身影以及那无助的眼神,可你们心中只想这……
幸福59厘米之爱有多久观后感范文无意间看到跨界私奔《幸福59厘米之爱有多久》,整部片子仅36分29秒,当我看到男主角鑫子唱那首歌时,我哭了,但我分不清是被他的那份忠诚感动了,还是为他那撕心裂肺的撕裂,触动了我……
苹果手机2022年05月01日新消息苹果手机苹果手机2022年05月01日新消息手机出货量大跌厂商心急如焚创新不够还是消费者没钱?如果苹果出了折叠屏你觉得会卖爆吗?介绍苹……
以大带小加快企业数字化作者:曹钟雄工信部日前印发的《工业互联网专项工作组2022年工作计划》提出,鼓励大型企业打造符合中小企业特点的数字化平台。这表明,数字经济和实体经济深度融合、通过数字化转……
如果可以旅行,你想去哪里六年级作文如果可以旅行,你想去哪里?我想去古老的希腊见证神话。想去劝阻追逐太阳的伊卡洛斯,那过于灼热的光芒会将接近他的人灼伤;想去阿戈尔船,与为了寻找传说中的金羊毛的英雄们而一同历险,一……
给你的一封信1200字嗨:晚上刷朋友圈,看到你PO了几张试穿婚纱的照片,忽然想写封信给你。称呼就难住了我,喊你的名字?众人周知的幼小妖?还是当年的召唤阳光?纠结一晌,算了。许久未曾……
一张令人发笑的照片四年级作文400字明明刚学会用相机拍照,就迫不及待地想去试一试。这不,星期天他把作业做好,就兴致勃勃地举着相机寻找目标去了。明明这一次可不是闹着玩的,他想拍一张令人发笑的照片,在家长、同学……
关于玩雪的作文玩雪外面是一片银装素裹的白雪世界了,我们再也忍不住白雪的诱惑,一个个像飞出笼子的小鸟,飞奔下楼,去玩雪。雪还在不停地下,我们开始在雪地上狂奔,有的手舞足蹈的追雪花,有的伸出冻……
关于母亲的初中作文3篇母亲在我们每个人心中是那么的神圣、崇高。下面是小编为你带来的关于母亲的初中作文3篇,欢迎阅读。【篇一:母亲的味道】打开窗户,北风呼呼地刮着,敲打着一根根树枝,发出吱吱的响……