STL算法——函数对象(仿函数)
全部案例链接
https://download.csdn.net/download/weixin_45525272/12536637
1 函数对象
重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象,也叫仿函数(functor),其实就是重载“()”操作符,使得类对象可以像函数那样调用。
注意:
1.函数对象(仿函数)是一个类,不是一个函数。
2.函数对象(仿函数)重载了”() ”操作符使得它可以像函数一样调用。
分类:假定某个类有一个重载的operator(),而且重载的operator()要求获取一个参数,我们就将这个类称为“一元仿函数”(unary functor);相反,如果重载的operator()要求获取两个参数,就将这个类称为“二元仿函数”(binary functor)。
函数对象的作用主要是什么?
STL提供的算法往往都有两个版本,其中一个版本表现出最常用的某种运算,另一版本则允许用户通过template参数的形式来指定所要采取的策略。
函数对象是重载了函数调用符号的类
class MyPrint
{public:MyPrint(){m_Num = 0;}int m_Num;public:void operator() (int num){cout << num << endl;m_Num++;}
};函数对象
重载了()操作符的类实例化的对象,可以像普通函数那样调用,可以有参数 ,可以有返回值
void test01()
{MyPrint myPrint;myPrint(20);}
函数对象超出了普通函数的概念,可以保存函数的调用状态
void test02()
{MyPrint myPrint;myPrint(20);myPrint(20);myPrint(20);cout << myPrint.m_Num << endl;
}void doBusiness(MyPrint print,int num)
{print(num);
}函数对象作为参数
void test03()
{//参数1:匿名函数对象doBusiness(MyPrint(),30);
}
2 总结:
1、函数对象通常不定义构造函数和析构函数,所以在构造和析构时不会发生任何问题,避免了函数调用的运行时问题。
2、函数对象超出普通函数的概念,函数对象可以有自己的状态
3、函数对象可内联编译,性能好。用函数指针几乎不可能
4、模版函数对象使函数对象具有通用性,这也是它的优势之一
STL算法——函数对象(仿函数)相关推荐
- STL之函数对象和谓词
1.函数对象 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特征,就是通过"对象名+(参数列表)&q ...
- STL算法——内建函数对象
文章目录 1 全部案例链接 2 内建函数对象 6个算数类函数对象,除了negate是一元运算,其他都是二元运算. 6个关系运算类函数对象,每一种都是二元运算. 逻辑运算类运算函数,not为一元运算,其 ...
- c++中STL的常用算法--1(函数对象,谓词,内建函数对象)
函数对象 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象,也叫仿函数(functor),其实就是重载"()"操作符,使得 ...
- 仿函数 ( 函数对象 ) 详解
在C语言中我们是如何实现函数的传递呢? 没错就是函数指针! template<class T> void Say(T a) {cout << a << endl; ...
- C++提高编程(四)—— STL函数对象
C++系列内容的学习目录→\rightarrow→C++学习系列内容汇总. 1. 函数对象 1.1 函数对象概念 1.2 函数对象使用 2. 谓词 2.1 谓词概念 2.2 一元谓词 2.3 二元谓词 ...
- STL运用的C++技术(6)——函数对象
http://blog.csdn.net/wuzhekai1985/article/details/6658940?_t_t_t=0.20427969420870595 STL是C++标准库的重要组成 ...
- 【C++】优先级队列priority_queue/仿函数(函数对象)
这里写目录标题 一.优先级队列 1.优先级队列的介绍 2.priority_queue的定义与使用 二.仿函数/函数对象 三.优先级队列的模拟实现 一.优先级队列 1.优先级队列的介绍 1)注意优先级 ...
- C++:函数指针进阶(四):函数对象operator()
C++中的 operator() 有两大主要作用: 1:Overloading --------重载() 操作符 2: Casting------实现对象类型转化 1:Overloading重载() ...
- C++11后的STL算法
文章目录 一.函数对象 二.预定义的函数对象 三.算法函数 1.自己实现foreach算法 2.自己实现的findif算法 3.自己实现bsort算法 一.函数对象 STL提供了很多处理容器的函数模板 ...
最新文章
- 数学系学生的漫画,治愈了整个朋友圈
- title与h1标签的区别和联系
- 16年微软/腾讯云/华为云MVP是怎样炼成的
- HIVE ORC 报错ClassCastException
- Python使用修饰器强制函数只接收关键参数
- 设计算法统计二叉树(采用二叉链存储结构)中结点值为x的结点个数_20题,算法工程师能力评估测试来啦...
- 实验5.6 定义包含5个元素的对象数组,每个元素都是Employee类型的对象
- [Android Pro] app_process command in Android
- Spring 动态代理
- Window10主硬盘更换及系统重装
- 基于Rasa框架搭建中文机器人对话系统
- 内核启动分析(三)——zImage 解压缩阶段
- Win10家庭版如何正确关闭自动更新
- 校招----蚂蚁金服测试开发面经
- URULE库文件的使用
- Ackerman的非递归算法思路讲解
- 飞鸽传书如何在VMware下进行通信
- 我,机械工程硕士,工作一年,月入6K
- java碳纤维折叠自行车和鸟车_知识 | 碳纤维自行车优缺点,供大家参考一下
- SuperMap iObjects Docker打包全攻略
热门文章
- 计算机管理没用硬盘,win10电脑未使用中为什么硬盘一直在读写_win10未工作硬盘一直读写解决方法...
- VMware虚拟机封装windows10:系统个性化设置+母盘精简(附视频)
- ubuntu 16.04 安装并设置使用截图软件 Shutter
- 用友汽车通过科创板注册:预计年营收超6亿 拟募资5.6亿
- 宝塔linux网站解析,宝塔面板|Linux网站控制面板,宝塔linux
- 面试时唬人的3个Excel技巧,最后一个能把主考官目瞪口呆
- js基础之setTimeout与setInterval原理分析
- Linux 权限管理基础
- 设置控制台应用程序运行时不弹出控制台
- 目前市面上的单片机操作系统很多,为何FreeRTOS会这么抢眼