C++:21---仿函数
什么是仿函数
所谓的仿函数(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---仿函数相关推荐
- 【转】Android4.4 之Bluetooth整理
原文网址:http://www.cnblogs.com/shed/p/3737016.html Android 4.4上蓝牙协议栈采用的是BRCM和Google共同开发的bluedroid,代替了之前 ...
- STL之vector,数组线性容器array,list容器,算法find,find_if,bind1st,仿函数
1.STL(Standard Template Library,是用泛型技术来设计完成的实例)的概念与组成 Iterator(迭代器) Container(容器) Algorithm(算法) A ...
- STL学习笔记(仿函数)
仿函数(Functors) 仿函数(functor),就是使一个类的使用看上去象一个函数.其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了. 例如我们定义一个 ...
- 【C++ STL】深入解析神秘的 --- 仿函数
一,概述 仿函数(functor),就是使一个类的使用看上去象一个函数.其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了. 有些功能的的代码, ...
- 揭富人与穷人21个不同思维 看富豪如何脱颖而出
<富人是怎么想的>(How Rich People Think)的作者Steve Siebold曾在近30年里采访世界各地的富豪,看究竟是什么让富豪从普通人中站出来. 他发现这和金钱基本没 ...
- MySQL最新版8.0.21安装配置教程~
目录 1.下载得到zip压缩包 2.解压到要安装的目录 3.添加环境变量 4.新建mysql 配置文件 5.安装mysql服务 6.初始化数据文件 7.启动mysql 8.进入mysql管理界面修改密 ...
- Android getDrawable 直接使用 提示要求API为21 的处理方法
大致如下 这个处理方法可以在getDrawable 前面添加 ContextCompat 如下 imageView.setImageDrawable(ContextCompat.getDrawabl ...
- View requires API level 21 (current min is 15): Toolbar
第一种情况: 在布局文件报错,查看错误提示View requires API level 21 (current min is 15): <Toolbar> 这个说要求要api版本为21 ...
- 第十二周 11.15-11.21
11.15 补个BC. HDU 5565 Clarke and baton 没太懂题解怎么搞.反正挺暴力过了. 1 #include <iostream> 2 #include <c ...
- mysql5.7.20安装红黑_Window环境安装MySQLServer5.7.21
正常我们在mysql官网下载安装的MySQL比较大,因为它集成了好多东西,尽管方便,但是东西比较多,有些我们可能不想要,这时我们可以直接下载单个MySQL Server安装,所以这篇文章主要介绍的就是 ...
最新文章
- JQuery操作下拉框
- 树状数组与离散化与求第K大模板
- fortify扫描java_亲测有效的几种fortify扫描安全漏洞的解决方案
- 关于JavaScript的变量和函数提升
- 今日头条架构演进之路——高压下的架构演进专题(含PPT)
- 一起谈.NET技术,编写T4模板无法避免的两个话题:quot;Assembly Lockingquot;amp;quot;Debugquot;...
- sqlrowset 转化为json_Python 操作 JSON 的 9 个示例
- 验证(Authentication)和授权(Authorization)(一):
- raid5换硬盘显示ready_服务器RAID磁盘坏道修复实战
- HTML+CSS面试试题(部分)
- 外贸独立站怎么提高转化率
- Android加载PDF文档
- Ubuntu 查看电脑配置
- 结合FME利用倾斜三维模型数据成果生成DSM等数据产品
- HTML之表格、表单
- Python与企业微信-2
- ShanaEncoder 官网链接
- 记事本文档转成excel
- Python读取夜间灯光数据看中国城市发展
- 微信公众号添加图片链接
热门文章
- php考勤分析,php考勤系统
- 关于std:auto_ptr
- 练字格子纸模板pdf_高考英语作文模板(总结八种常考题型,配合例文,纯手打的)...
- elementui获取所有树节点_element-ui tree获取子节点全选的父节点信息
- 【转】Dynamics 365中开发和注册插件介绍
- 程序员们的三高:高并发、高性能、高可用
- C#多线程编程系列(二)- 线程基础
- php 9000 端口没起来,ubuntu fpm-php 未监听9000端口问题
- CCNA-第十四篇-NAT-下+链路聚合(LACP)+DHCP
- 【Python学习】 - anaconda中spyder的常用快捷键总结