全部案例链接

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算法——函数对象(仿函数)相关推荐

  1. STL之函数对象和谓词

    1.函数对象 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特征,就是通过"对象名+(参数列表)&q ...

  2. STL算法——内建函数对象

    文章目录 1 全部案例链接 2 内建函数对象 6个算数类函数对象,除了negate是一元运算,其他都是二元运算. 6个关系运算类函数对象,每一种都是二元运算. 逻辑运算类运算函数,not为一元运算,其 ...

  3. c++中STL的常用算法--1(函数对象,谓词,内建函数对象)

    函数对象 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象,也叫仿函数(functor),其实就是重载"()"操作符,使得 ...

  4. 仿函数 ( 函数对象 ) 详解

    在C语言中我们是如何实现函数的传递呢? 没错就是函数指针! template<class T> void Say(T a) {cout << a << endl; ...

  5. C++提高编程(四)—— STL函数对象

    C++系列内容的学习目录→\rightarrow→C++学习系列内容汇总. 1. 函数对象 1.1 函数对象概念 1.2 函数对象使用 2. 谓词 2.1 谓词概念 2.2 一元谓词 2.3 二元谓词 ...

  6. STL运用的C++技术(6)——函数对象

    http://blog.csdn.net/wuzhekai1985/article/details/6658940?_t_t_t=0.20427969420870595 STL是C++标准库的重要组成 ...

  7. 【C++】优先级队列priority_queue/仿函数(函数对象)

    这里写目录标题 一.优先级队列 1.优先级队列的介绍 2.priority_queue的定义与使用 二.仿函数/函数对象 三.优先级队列的模拟实现 一.优先级队列 1.优先级队列的介绍 1)注意优先级 ...

  8. C++:函数指针进阶(四):函数对象operator()

    C++中的  operator() 有两大主要作用: 1:Overloading --------重载() 操作符 2: Casting------实现对象类型转化 1:Overloading重载() ...

  9. C++11后的STL算法

    文章目录 一.函数对象 二.预定义的函数对象 三.算法函数 1.自己实现foreach算法 2.自己实现的findif算法 3.自己实现bsort算法 一.函数对象 STL提供了很多处理容器的函数模板 ...

最新文章

  1. 数学系学生的漫画,治愈了整个朋友圈
  2. title与h1标签的区别和联系
  3. 16年微软/腾讯云/华为云MVP是怎样炼成的
  4. HIVE ORC 报错ClassCastException
  5. Python使用修饰器强制函数只接收关键参数
  6. 设计算法统计二叉树(采用二叉链存储结构)中结点值为x的结点个数_20题,算法工程师能力评估测试来啦...
  7. 实验5.6 定义包含5个元素的对象数组,每个元素都是Employee类型的对象
  8. [Android Pro] app_process command in Android
  9. Spring 动态代理
  10. Window10主硬盘更换及系统重装
  11. 基于Rasa框架搭建中文机器人对话系统
  12. 内核启动分析(三)——zImage 解压缩阶段
  13. Win10家庭版如何正确关闭自动更新
  14. 校招----蚂蚁金服测试开发面经
  15. URULE库文件的使用
  16. Ackerman的非递归算法思路讲解
  17. 飞鸽传书如何在VMware下进行通信
  18. 我,机械工程硕士,工作一年,月入6K
  19. java碳纤维折叠自行车和鸟车_知识 | 碳纤维自行车优缺点,供大家参考一下
  20. SuperMap iObjects Docker打包全攻略

热门文章

  1. 计算机管理没用硬盘,win10电脑未使用中为什么硬盘一直在读写_win10未工作硬盘一直读写解决方法...
  2. VMware虚拟机封装windows10:系统个性化设置+母盘精简(附视频)
  3. ubuntu 16.04 安装并设置使用截图软件 Shutter
  4. 用友汽车通过科创板注册:预计年营收超6亿 拟募资5.6亿
  5. 宝塔linux网站解析,宝塔面板|Linux网站控制面板,宝塔linux
  6. 面试时唬人的3个Excel技巧,最后一个能把主考官目瞪口呆
  7. js基础之setTimeout与setInterval原理分析
  8. Linux 权限管理基础
  9. 设置控制台应用程序运行时不弹出控制台
  10. 目前市面上的单片机操作系统很多,为何FreeRTOS会这么抢眼