C++中的仿函数
仿函数:实质就是重载了小括号(),通过类,定义一个对象,对象可以被实例化,具有内存可以存储数据,把需要比较的数据事先给到类对象的成员,这样在比较两个值的时候,可以只传入需要被比较的值即可。因为比较的值有一个已经在类实例化对象时,就已经初始化给到类对象的成员,后期只需要传入需要被比较的那个值。
如:使用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
C++中的仿函数的更多相关文章
- C++中的仿函数,std::function和bind()的用法
1.仿函数:又叫std::function,是C++中的一个模板类 2.C语言中的函数指针: int add(int a,int b) { return a+b; } typedef int (*f ...
- 仿函数(二、stl中常用仿函数)
提到C++ STL,首先被人想到的是它的三大组件:Containers, Iterators, Algorithms,即容器,迭代器和算法.容器为用户提供了常用的数据结构,算法大多是独立于容器的常用的 ...
- C++ functional库中的仿函数
一.仿函数简介 仿函数(functor)又称之为函数对象(function object),实际上就是 重载了()操作符 的 struct或class. 由于重载了()操作符,所以使用他的时候就像在调 ...
- C++11中的Lambda表达式
原文地址:C++中的Lambda表达式 作者:果冻想 一直都在提醒自己,我是搞C++的:但是当C++11出来这么长时间了,我却没有跟着队伍走,发现很对不起自己的身份,也还好,发现自己也有段时间没有写C ...
- Qt5中使用lambda表达式
c11新特性中加入了lambda表达式,所以Qt 也支持 需在.pro文件中加入 CONFIG += c++11 例子: QString program = "C:/Windows/Syst ...
- Qt5中的lambda表达式和使用lambda来写connect
c11新特性中加入了lambda表达式,所以Qt 也支持 需在.pro文件中加入 CONFIG += c++11 例子: QString program = "C:/Windows/Syst ...
- STL基础--仿函数(函数对象)
1 首先看个仿函数的例子 class X { public: void operator()(string str) { // 函数调用运算符,返回类型在operator之前 cout << ...
- STL——仿函数(函数对象)
一.仿函数(也叫函数对象)概观 仿函数的作用主要在哪里?从第6章可以看出,STL所提供的各种算法,往往有两个版本,其中一个版本表现出最常用(或最直观)的某种运算,第二个版本则表现出最泛化的演算流程,允 ...
- STL标准库-仿函数与仿函数适配器
技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 概要: 1.仿函数 2.bind2nd() 3.not1() 4.bind() 仿函数的实现:声明一个类,重载它的operato ...
随机推荐
- ubuntu python3和python2切换脚本
最近在ubuntu上开发较多,有些工具只能在python2运行,而开发又是在python3上做的开发,所以写个脚本方便在python2和python3之间切换. 切换成python2的文件usepy2 ...
- C# 代码小技巧
一 .自动属性. 1.vs下输入prop,Tab键就出现了. 2.有了自动属性,我们不用再额外为一个类的每个公共属性定义一个私有字段(实际上没多大用处的字段), 但是通过反射还是可以看到对应的私有 ...
- cmd下PUSHD和POPD命令使用说明
PUSHD命令保存当前目录以供 POPD 命令使用,然后改到指定的目录. PUSHD [path | ..] path 指定要成为当前目录的目录. 如果命令扩展被启用,除了一般驱动器号和路径,PUSH ...
- [UE4]Dynamic Entry Box
Dynamic Entry Box:条目创建容器 一个特殊的容器,能够自动创建条目,在可变数量条目的时候,但是又不值得创建一个ListView或者Tile View. 注意: Dynamic Entr ...
- C# 栈 、队列的概念
栈: 也是System.Collections下的数据结构 存储依然是Object类型的对象 Stack 名字 = new Stack(); Count:实际拥有的元素个数 栈的释放顺序是先进后出(后 ...
- Solr——配置IK分词器
首先需要的准备好jdk1.8和tomcat8以及ik分词器(ik分词器是5.x的版本,和solr4.10搭配的版本不一样,虽然是5.x的版本但是也是能使用在solr7.2版本上的) 分享链接https ...
- 学习excel的使用技巧四显示正常的数字
记得之前在excel中输入一些数字比如输入手机号 就会变成1.E几类似这种 那么怎样显示正常的数字呢 先选中要操作的输入框 1 找到 数字 这个功能的地方 2 设置为 数值 并且小数点为0 3 ...
- git 修改客户端用户名和密码
1.修改某个具体项目中的用户名密码 vim xx/{yourProject dir }/.git/.git-credentials 在.git-credentials文件中配置用户名密码 https: ...
- 【FZSZ2017暑假提高组Day1】确定小组
[问题描述] 有n个人坐成一排,这n个人都在某一个小组中,同一个小组的所有人所坐的位置一定是连续的. 有一个记者在现场进行采访,他每次采访都会询问一个人其所在的小组有多少人,被询问的每个人都给出了正确 ...
- ubuntu系统中安装eclipse
具体可以看这篇博文 .https://www.cnblogs.com/sanduo1314/articles/5137090.html 然后再/usr/share/applications中找到ecl ...