我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:六合公式 > 仿函数 >

C++中仿函数函数对象指针的用法

归档日期:07-02       文本归类:仿函数      文章编辑:爱尚语录

  研究这个起因是这样的,就是今天在用priority_queue的时候,需要自定义比较函数,但是此时又不能修改需要比较的类的内容(即不能用重载的方法),所以只能写在外面,但是发现这样并不能编译通过。报的错叫cmp(我写的那个比较函数)不是类型名。后来查了下资料发现,这个需要用比较类去完成,比较类需要重载()方法,所以这个事情就非常引起我的好奇,想要知道一下,为什么sort这样的函数就可以直接用函数名,而priority_queue就不行呢

  函数对象(function object)又叫仿函数(functor),就是重载了调用运算符()的类,所生成的对象,就叫做函数对象/仿函数。因为重载了()之后,我们就能像函数一样去使用这个类,同时类里面又可以储存一些信息,所以要比普通的函数更加灵活。

  lambda表达式的用法,我单独放偏博客来讲吧,这个坑先留着。这里就记住lambda也是一个函数对象就行了。

  跟priority_queue类似的带着比较函数的容器还有set和map。记住STL容器中里面传入的一定是类型名称,不能是具体的实例。

  注意此时一定要写*,因为用decltype来获得一个函数指针类型时,其只返回函数类型,而非指针类型,所以这个地方要显示的加上 * 表明这里是函数指针.

  所以开头中提到的问题,这里其实就已经非常明白了,我在查资料的时候,一直就坑在了这个地方,后来恍然大悟.

  所以其实set里面传入函数也是可以的,只不过在中需要写的不是具体函数名,而是这个函数指针的类型,然后用那个具体的函数来初始化set.就像我上面写的那样.

  而对于sort来说,因为其本身就是一个函数了,所以传进去具体的比较函数实例就可以.

  同理,如果再sort中传入的是类型也是不可以的,所以需要传入一个具体的实例,就像上面的那个sort必须要加()来给它实例化

  一,概述    仿函数(functor),就是使一个类的使用看上去象一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了。有些功能的的代码,会在不同...博文来自:小田的专栏

  摘要:这篇文章详细介绍C/C++的函数指针,请先看以下几个主题:使用函数指针定义新的类型、使用函数指针作为参数、使用函数指针作为返回值、使用函数指针作为回调函数、使用函数指针数组,使用类的静态函数成员...博文来自:Dev-L的博客

  注意调用类中非静态成员函数的时候,使用的是类名::函数名;而不是实例名::函数名。...博文来自:部落阁

  /*decltype的使用:以下来自百度百科的解释:在C++中,decltype作为操作符,用于查询表达式的数据类型。decltype在C++11标准制定时引入,主要是为泛型编程而设计,以解决泛型编程...博文来自:liuguangsh的博客

  1.函数指针函数指针:是指向函数的指针变量,在C编译时,每一个函数都有一个入口地址,那么这个指向这个函数的函数指针便指向这个地址。函数指针主要由以下两方面的用途:调用函数和用作函数参数。函数指针的声明...博文来自:skillart的专栏

  1.类成员函数指针调用         注意:如果在类内调用,则函数指针声明要放在类里面.如果是类外调用,则函数指针声明放在调用类中.CFunCall.h文件:classCFunCall{typede...博文

  端午放假回家,无意间拾起侯捷的,之前一直看的不太懂,没想到今天翻到仿函数(factors)一章,竟有所收获,而且刚好与上一章讲述的函数指针很有关联,遂赶紧记录下来。在algorithm算法库中有...博文来自:cracker_zhou的博客

  C/C++代码中常见函数指针的使用,C++中经常碰到函数对象这种用法,在此简单总结。1.函数指针函数指针(functionpointer)就是指向某函数的指针变量,即指向所谓的函数入口地址。函数指针的...博文来自:Housz的博客

  C++的函数调用语法实体有函数、类似于函数的宏、函数指针、仿函数(即函数对象)。函数调用的方式有:   (1)直接调用:通过函数名直接调用函数,函数起始地址成为指令的一部分,因此编译期就能确定调...博文来自:Jack Zhou的专栏

  编写Windows服务在Windows服务程序开发中有利用c#和vs的实现方法。下面列举一些在编写windows服务程序时遇到的一些问题及解决方法。 错误1053:服务没有及时响应启动或控制请求。分析...博文来自:summer

  函数指针在平常的C/C++代码编程中,我们经常会碰到函数指针(FunctionPointer)这个概念,函数指针,顾名思义,指向函数入口的指针。像我们平常使用的指向数组的指针,我们可以传递数组的地址。...博文来自:honeyJ

  转自:仿函數跟callback函數很類似,但是...博文来自:yasi_xi的专栏

  1.仿函数可有拥有自己的数据成员和成员变量,这意味着这意味着仿函数拥有状态。这在一般函数中是不可能的。2.每个仿函数有自己的型别。3.仿函数通常比一般函数有更好的速度。......博文来自:weixin_40237626的博客

  有时候会遇到这种情况:希望从表达式的类型推断出要定义的变量的类型,但是又不想用该表达式的值初始化变量.c++11新标准引入了第二种类型说明符decltype,它的作用是选择并返回操作数的数据类型.在此...博文来自:oyang_mrong的博客

  一、指针函数 当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中。格式:类型说明符*函数名(参数)当然了,由于返回的是一个地址,所以类型说明符一般都是...博文来自:haxianhe的博客

  这篇文章是根据维基百科整理来的,原文请看:提供了对匿名函数的支持,称为Lam...博文来自:richerg85的专栏

  函数对象:定义了调用操作符()的类对象。当用该对象调用此操作符时,其表现形式如同普通函数调用一般,因此取名叫函数对象。举个最简单的例子:classA{public:intoperator()(intv...博文来自:summer

  (1)函数指针与指针函数(1)函数指针一种特殊的指针,它指向函数的入口;/**定义一个函数指针p,只能指向返回值为int,形参为两个int的函数*/int(*p)(int,int);/**求最大值*返...博文来自:Stupid birds home

  编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型。然而做到这一点并非那么容易(特别是模板中),有时候根本做不到。为了解决这个问题,C++11新标准就引入了auto类型...博文来自:YzlCoder的记事本

  一:起因(0)提到C++STL,首先被人想到的是它的三大组件:Containers(容器),Iterators(迭代器),Algorithms(算法)。容器为用户提供了常用的数据结构(如,vector...博文来自:思緒凌亂

  1.     定义每一个函数都占用一段内存单元,它们有一个起始地址,指向函数入口地址的指针称为函数指针。2.     语法指向函数的指针变量的一般定义形式为:数据类型(*指针变量名)(参数表);3. ...博文来自:candyliuxj

  一、仿函数(functor)  就是一个类的使用上看像一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数了。有些功能的代码,会在不同的成员函数中都要复用,...博文来自:JasBin2008的专栏

  摘自:STL源码剖析   仿函数的主要用途是为了搭配STL算法,函数指针同样可以达到将整组操作当做算法的参数,但是函数指针是不能满足STL对抽象性的要求,也不能满足软件积木的要求---------...博文来自:jaybroker的博客

  我们知道仿函数是仅重载了括号操作符,且定义了若干相应型别的类。仿函数存在的意义,是为了能提取出仿函数中定义的相应型别,使仿函数能与函数适配器进行配接,而这些相应型别则主要是用来表现函数参数类型与传回值...博文来自:Virtual_Func的博客

  利用typedef定义函数指针进入正文:代码简化,促进跨平台开发的目的.typedef行为有点像#define宏,用其实际类型替代同义字。不同点:typedef在编译时被解释,因此让编译器来应付...博文来自:u014114990的专栏

  前言函数指针和指针函数,在学习C语言的时候遇到这两个东西简直头疼,当然还有更头疼的,比如什么函数指针函数、指针函数指针、数组指针、指针数组、函数指针数组等等,描述越长其定义就越复杂,当然理解起来就越难...博文来自:luoyayun361的专栏

  在C/C++中,数据指针是最直接,也最常用的,因此,理解起来也比较容易。而函数指针,作为运行时动态调用(比如回调函数CallBackFunction)是一种常见的,而且是很好用的手段。我们先简...博文来自:zhbaoq的专栏

  引子先考虑一个简单的例子:假设有一个vectoramp;lt;stringamp;gt;,你的任务是统计长度小于5的string的个数,如果使用count_if函数的话,你的代码:...博文来自:我的大学

  之前总结过一篇Boost之高阶函数——函数对象,介绍了几个用于处理函数对象的BoostC++库。而目前C++11的标准库std已经提供了函数对象的一些功能。根据wiki可以知道Higherorderf...博文来自:delphiwcdj的专栏

  CSV是一种通用的、相对简单的文件格式,最广泛的应用是在程序之间转移表格数据,而这些程序本身是在不兼容的格式上进行操作的。那么,C#如何读取和写入csv格式文件呢?...博文来自:summer

  今天吃饭的时候逛了下知乎,发现一个和函数指针相关的问题(感觉这种知识点拿来面试简直无聊,以前在C++PrimePlus上看到过类似的,只是大概的看了一下,感觉以后应该不怎么用到…)问题为,int(*(...博文来自:独钓寒江雪

  在c使用函数指针与c++虚拟函数不同,尽管virtualfunction的本质也是函数指针。在用c设计时,尽管没有抽象设计,但通过使用函数指针留出callback接口,就可以把不同的动作从代码中剥离出...博文来自:Akron的专栏

  1.当我们发现无法联网时,我们运行下面命令或者ping命令 ip  addr 结果没有显示局域网的IP地址 2.我们去修改网卡配置文件,把网络连接打开 cd / cd  /etc/sys...博文来自:sfeng95的博客

  在我刚刚过去的研究生毕设中,我在ImageNet数据集上验证了图像特征二值化后仍然具有很强的表达能力,可以在检索中达到较好的效果。而Bengio大神的这篇文章,则不止于将特征二值化,而是要将权重和每层...博文来自:雨石

  原文地址:因为需要用,所以才翻译了这个文档。但总归赖于英语水平很有限,翻译出来的中文有可能...博文来自:ymj7150697的专栏

  Unity一键打包工具,一键生成几十个平台/渠道的安装包。博文来自:夜风的BLOG

  注1:RUtils是我偶然发现的一个工具包,它建立在Rserve之上,可以很大程度上简化我们的程序,关于Rserve网络上有很多相关的内容,这里不对其进行介绍,比如这里:博文来自:竹叶青的专栏

  好长时间之前做过的一个项目 , 其中设计到用Unity模拟卡拉OK歌词过渡的效果 , 如下图所示 ↓ , 这里简单把原理部分分享一下. 演示效果 ↓ 实现歌词动态调整功能 实现动态读取歌...博文来自:月儿圆

  docx4j官方提供了一些例子,本文只是其中一部分应用的简单例子。需要注意的地方是页眉和页脚,必须创建对应关系才能起作用。页眉和页脚添加图片的时候,第二个参数sourcePart是必须的,调用的cre...博文来自:偶尔记一下

  扫二维码关注,获取更多技术分享 本文承接之前发布的博客《 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付》必须阅读上篇文章后才可以阅读这篇文章。由于最近一段时间工作比较忙,...博文来自:Marswill

  推荐 分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!推荐...博文来自:strongerHuang的专栏

  Java中的ThreadLocal类允许我们创建只能被同一个线程读写的变量。因此,如果一段代码含有一个ThreadLocal变量的引用,即使两个线程同时执行这段代码,它们也无法访问到对方的Thread...博文来自:u011860731的专栏

  这篇文章要表达的并非数据库相关的知识,而是如何使用DBIOWrapper。       DBIOWrapper是一个工作在Windows下、对ODBC式数据访问进行了小型封装的库。其设计目标是提供极简...博文来自:哈哈 哈 哈哈,哈 哈 哈哈哈

  强连通分量: 简言之 就是找环(每条边只走一次,两两可达) 孤立的一个点也是一个连通分量   使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点)   定义: int Ti...博文来自:九野的博客

  安装oracle 9i后,居然把刚刚更改的数据库管理员密码给忘了,又不重新安装,太麻烦了,试了好久,终于修改成功了。1、运行到C盘根目录2、输入:SET ORACLE_SID = 你的SID名称3、输...博文来自:llxsharp的专栏

  Cocos2d-x 2.2.3 使用NDK配置编译环境2014年6月11日 Cocos2d-x 3.0以下的开发环境的配置恐怕折磨了很多人,使用cygwin配置编译环境足够让初学者蛋疼一阵子了。本篇博...博文来自:巫山老妖

  jquery/js实现一个网页同时调用多个倒计时(最新的) 最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦! //js ...博文来自:Websites

  摘要:为了协助处理器完成初始化和控制系统操作,80x86提供了一个标志寄存器和几个系统寄存器。Eflags用于控制任务切换、中断处理、指令跟踪和权限访问。系统寄存器用于内存管理和控制处理器操作。 1...博文来自:河西无名式

  题目点评 数据类型是所有程序都会涉及到的,是计算机语言比较基础知识,这种问题被问到的可能性其实并不大,这样的题目只要花点时间把它记下来就好了,难易程度一般。  两大类: 栈:原始数据类型(Und...博文来自:雄领IT的专栏

  今天在本地做了修改,后来又不想要这次修改的内容,想要还原到修改之前的状态,有一个比较省力的方法,直接从git服务器对应的分支获取覆盖本地的程序。 命令如下:git checkout -f 这样就...博文来自:leedaning的专栏

  有时我们需要绘制热图,用x轴、y轴表示两维数据,用颜色表示第三维 第一步:需要准备三列数据,如图1,这里我用U表示x轴数据,它的取值范围为[0-1],间隔为0.05,E表示y轴,取值范围也是[0-1]...博文来自:SunCherryDream的专栏

  本文介绍如何使用VS2015作为编译开发环境,调用OpenCV3.31和Qt5.9.1写图像处理的GUI。 1.目录结构 假设我们要创建一个名为VideoZoom的工程,那么首先按下图构建目录结构...博文来自:zhhp1001的博客

  :核函数K(x,y)将其中一个元素固定K(x_0,y),则其也可以看成一个函数 下面的等式没看明白,博主能详细解释一下吗

  yinzx6083365:胜败树的调整时必定要从叶子到根走一遍,但是堆可能不用,遍历到中间可能就break了

  weixin_38075257:KL公式应该是正确的,只是作者这个地方写的是q对p的相对熵,就是相当于用q分布去估计p分布时候的相对熵,和交叉熵的情况没有统一表示而已~

本文链接:http://renfriends.com/fanghanshu/675.html