什么是仿函数

所谓的仿函数(functor),是通过重载()运算符模拟函数形为的类。

  因此,这里需要明确两点:

  1 仿函数不是函数,它是个类;

  2 仿函数重载了()运算符,使得它的对你可以像函数那样子调用(代码的形式好像是在调用函数)。

假设有一个vector<string>,你的任务是统计长度小于20的字符串的个数,如果使用count_if函数的话,你的代码可能长成这样:

#define STR_LEN  20
bool LengthIsLess(const string& str) {
    return str.length()<STR_LEN;
}
int res=count_if(vec.begin(), vec.end(), LengthIsLess);

  其中count_if函数的第三个参数是一个函数指针,返回一个bool类型的值。

  如果修改LengthIsLess这个函数原型,将原来的宏定义通过参数传进来呢:

bool LengthIsLess(const string& str, int len)

但是他不能满足count_if函数的参数要求:count_if要求的是仅带有一个参数。怎么样找到以上两个函数的一个折中的解决方案呢?

 有三种解决方案可以考虑:

1、函数的局部变量;

局部变量不能在函数调用中传递,而且caller无法访问。

2、函数的参数;

  这种方法我们已经讨论过了&#x

C++:21---仿函数相关推荐

  1. 【转】Android4.4 之Bluetooth整理

    原文网址:http://www.cnblogs.com/shed/p/3737016.html Android 4.4上蓝牙协议栈采用的是BRCM和Google共同开发的bluedroid,代替了之前 ...

  2. STL之vector,数组线性容器array,list容器,算法find,find_if,bind1st,仿函数

     1.STL(Standard Template Library,是用泛型技术来设计完成的实例)的概念与组成 Iterator(迭代器) Container(容器) Algorithm(算法) A ...

  3. STL学习笔记(仿函数)

    仿函数(Functors) 仿函数(functor),就是使一个类的使用看上去象一个函数.其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了. 例如我们定义一个 ...

  4. 【C++ STL】深入解析神秘的 --- 仿函数

    一,概述         仿函数(functor),就是使一个类的使用看上去象一个函数.其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了. 有些功能的的代码, ...

  5. 揭富人与穷人21个不同思维 看富豪如何脱颖而出

    <富人是怎么想的>(How Rich People Think)的作者Steve Siebold曾在近30年里采访世界各地的富豪,看究竟是什么让富豪从普通人中站出来. 他发现这和金钱基本没 ...

  6. MySQL最新版8.0.21安装配置教程~

    目录 1.下载得到zip压缩包 2.解压到要安装的目录 3.添加环境变量 4.新建mysql 配置文件 5.安装mysql服务 6.初始化数据文件 7.启动mysql 8.进入mysql管理界面修改密 ...

  7. Android getDrawable 直接使用 提示要求API为21 的处理方法

    大致如下 这个处理方法可以在getDrawable 前面添加  ContextCompat 如下 imageView.setImageDrawable(ContextCompat.getDrawabl ...

  8. View requires API level 21 (current min is 15): Toolbar

    第一种情况: 在布局文件报错,查看错误提示View requires API level 21 (current min is 15): <Toolbar> 这个说要求要api版本为21 ...

  9. 第十二周 11.15-11.21

    11.15 补个BC. HDU 5565 Clarke and baton 没太懂题解怎么搞.反正挺暴力过了. 1 #include <iostream> 2 #include <c ...

  10. mysql5.7.20安装红黑_Window环境安装MySQLServer5.7.21

    正常我们在mysql官网下载安装的MySQL比较大,因为它集成了好多东西,尽管方便,但是东西比较多,有些我们可能不想要,这时我们可以直接下载单个MySQL Server安装,所以这篇文章主要介绍的就是 ...

最新文章

  1. JQuery操作下拉框
  2. 树状数组与离散化与求第K大模板
  3. fortify扫描java_亲测有效的几种fortify扫描安全漏洞的解决方案
  4. 关于JavaScript的变量和函数提升
  5. 今日头条架构演进之路——高压下的架构演进专题(含PPT)
  6. 一起谈.NET技术,编写T4模板无法避免的两个话题:quot;Assembly Lockingquot;amp;quot;Debugquot;...
  7. sqlrowset 转化为json_Python 操作 JSON 的 9 个示例
  8. 验证(Authentication)和授权(Authorization)(一):
  9. raid5换硬盘显示ready_服务器RAID磁盘坏道修复实战
  10. HTML+CSS面试试题(部分)
  11. 外贸独立站怎么提高转化率
  12. Android加载PDF文档
  13. Ubuntu 查看电脑配置
  14. 结合FME利用倾斜三维模型数据成果生成DSM等数据产品
  15. HTML之表格、表单
  16. Python与企业微信-2
  17. ShanaEncoder 官网链接
  18. 记事本文档转成excel
  19. Python读取夜间灯光数据看中国城市发展
  20. 微信公众号添加图片链接

热门文章

  1. php考勤分析,php考勤系统
  2. 关于std:auto_ptr
  3. 练字格子纸模板pdf_高考英语作文模板(总结八种常考题型,配合例文,纯手打的)...
  4. elementui获取所有树节点_element-ui tree获取子节点全选的父节点信息
  5. 【转】Dynamics 365中开发和注册插件介绍
  6. 程序员们的三高:高并发、高性能、高可用
  7. C#多线程编程系列(二)- 线程基础
  8. php 9000 端口没起来,ubuntu fpm-php 未监听9000端口问题
  9. CCNA-第十四篇-NAT-下+链路聚合(LACP)+DHCP
  10. 【Python学习】 - anaconda中spyder的常用快捷键总结