浅析C++ 仿函数 C++ 仿函数是一种特殊的函数对象,具有类似函数的功能,但又是对象。它可以作为函数的参数传递,解决了函数指针参数类型不兼容的问题。 1. 仿函数的必要性 在介绍仿函数之前,需要了解为什么需要仿函数。假设我们需要编写一个函数,统计数组中大于10的数字的数量。编写的代码可能如下所示: ```cpp int RecallFunc(int *start, int *end, bool (*pf)(int)){ int count=0; for(int *i=start;i!=end+1;i++) { count = pf(*i) ? count+1 : count; } return count; } bool IsGreaterThanTen(int num){ return num>10 ? true : false; } int main(){ int a[5] = {10,100,11,5,19}; int result = RecallFunc(a,a+4,IsGreaterThanTen); cout<<result<<endl; return 0; } ``` 但是,如果我们希望将判定的阈值也作为一个变量传入,那么就不可行了。因为函数指针参数的类型是`bool (*)(int)”,与函数`bool IsGreaterThanThreshold(int num, int threshold)`的类型不符。 2. 仿函数的定义 仿函数(Functor)又称为函数对象(Function Object),是一个能行使函数功能的类。仿函数的语法几乎和我们普通的函数调用一样,不过作为仿函数的类,都必须重载operator()运算符。因为调用仿函数,实际上就是通过类对象调用重载后的operator()运算符。 3. 仿函数的优点 仿函数相比函数的优点在于: * 可以将某种“操作”当做算法的参数,且可以进行依赖、组合与继承等。 * 可以免去对一些公共变量的维护,也可以使重复使用的代码独立出来,以便下次复用。 *relative to functions, functors have a more excellent property. 4. 仿函数在STL中的应用 仿函数在STL中大量应用,例如set容器就使用了仿函数less。less继承的binary_function,就可以看作是对于一类函数的总体声明了,这是函数做不到的。 5. 仿函数的使用场景 仿函数的使用场景包括: * 将某种“操作”当做算法的参数。 * 需要将函数作为参数传递时。 * 需要对函数进行依赖、组合与继承等操作时。 仿函数是一种非常有用的技术,可以解决函数指针参数类型不兼容的问题,并且提供了更多的灵活性和可扩展性。
- 粉丝: 5
- 资源: 917
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Prophet时间序列预测入门.ipynb
- 一款由Java写的射击游戏.zip算法资源
- 一些java的小游戏项目,贪吃蛇啥的.zip用户手册
- 在线实时的斗兽棋游戏,时间赶,粗暴的使用jQuery + websoket 实现实时H5对战游戏 + java.zip课程设计
- HTML5酒店网站模板.zip
- 基于SpringBoot开发的支付系统(包括支付宝支付,微信支付,订单系统).zip
- C基于Qt的学生成绩管理系统.zip毕业设计
- 基于深度卷积神经网络(CNN)模型的图像着色研究与应用系统实现
- Java Web实验报告五:基于JSP的留言本
- Java Web实验报告四:基于AJAX的级联下拉菜单
- 1
- 2
前往页