C++中的仿函数
2024-08-30 08:59:19
仿函数:实质就是重载了小括号(),通过类,定义一个对象,对象可以被实例化,具有内存可以存储数据,把需要比较的数据事先给到类对象的成员,这样在比较两个值的时候,可以只传入需要被比较的值即可。因为比较的值有一个已经在类实例化对象时,就已经初始化给到类对象的成员,后期只需要传入需要被比较的那个值。
如:使用count_if()函数,取出比某个设定值大的数或小的数的个数
count_if():需要三个参数,前两个为指针,即待比较值的地址区间,第三个为选取比较的方式,将##一个值##传入第三个方式中。这个函数只能传入一个值,若不采用仿函数形式,在比较时不方便,需要在函数中手动设定待比较的值
如下,每次比较都需要手动设置7或者其他数字
bool LessThan7Function(const string& str) {
return str.length() < 7;
}
采用仿函数,则在初始化对象的时候,将比较值先传给对象的成员,这样后期就无需再设定,只要将待比较的值和对象的成员进行比较即可
#include "stdafx.h"
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;
class great
{
public:
bool operator()(const string&str)
{
return str.length() > length;
}
great(int ss) :length(ss){}
private:
int length;
};
int _tmain(int argc, _TCHAR* argv[])
{
vector<string>s{"apple","aaaaaa","123"};
int t = 0;
vector<string>::iterator first = s.begin();
vector<string>::iterator last = s.end();
t = count_if(first, last, great(2)); //将比较的值2先传给对象成员length
cout << t << endl;
return 0;
}
这篇博客来龙去脉讲的比较详细:https://blog.csdn.net/codedoctor/article/details/79654690
最新文章
- MAC Osx PHP安装指导
- scikit-learn 线性回归算法库小结
- C++ Windows 下 根据进程名获取进程ID 以及该进程下所有窗口的句柄
- MS CRM 2013 Plugin 注册工具登录后空白
- Java里面获取当前服务器的IP地址
- Nutch2.x
- Sublime Text快捷键和常用插件推荐
- C++11中对类(class)新增的特性
- grunt压缩合并代码
- magento
- MongoDB的查询
- 提前防止Non-PIE错误,检测app是否包含PIE标志
- ueditor表格边框没有颜色的解决
- 064 SparkStream与kafka的集成,主要是编程
- 基于【CentOS-7+ Ambari 2.7.0 + HDP 3.0】搭建HAWQ数据仓库——安装配置OPEN-SSH,设置主机节点之间免密互访
- docker的ubuntu镜像无ifconfig和ping netstat命令
- redis5.0主从配置
- C#,ArcGIS Engine开发入门教程
- 【RAC】使用一条“ps”命令获取Linux环境下全部RAC集群进程信息
- 2018.10.20 bzoj1925: [Sdoi2010]地精部落(dp)