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 ...
随机推荐
- DBLinq (MySQL exactly) Linq To MySql(转)
Linq to SQL很好用,可惜只支持Microsoft SQL Server 和Microsoft SQL Server Compact Edition,目前比较成熟的免费解决方法是DBLinq( ...
- 如何在myeclipse中安装spket插件
在web开发中,经常会遇到自动提示,比如jquery.extjs等,在myeclipse写这些代码时需要自动提示,就需要安装spket插件,具体方法见下面 工具/原料 myeclipse spke ...
- Python历史与安装
1.Python发展历史 起源 Python的作者,Guido von Rossum,荷兰人.1982年,Guido从阿姆斯特丹大学获得了数学和计算机硕士学位.然而,尽管他算得上是一位数学家,但他更加 ...
- git 一个分支完全覆盖另一个分支
1,git push origin develop:master -f就可以把本地的develop分支强制(-f)推送到远程master 2,git checkout master // 切换到旧的分 ...
- PHP chdir函数:改变当前的目录
PHP chdir函数的作用是改变当前的目录,这里主机吧详细介绍下chdir函数的用法,并列举使用chdir函数的例子. chdir定义和用法: chdir() 函数改变当前的目录. chdir实例: ...
- 判断是否某App
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <meta name= ...
- solr搜索
安装过程: 原料:solr-4.10.3.tgz.tgz 1.1.1 安装步骤 单独一台虚拟机先全部删除:根目录:rm * -rf cd /usr/local \ rm ...
- 第二篇*1、Python基本数据类型
数据类型: 变量可以处理不同类型的值,基本的类型是数和字符串.使用变量时只需要给它们赋一个值.不需要声明或定义数据类型.Python3 中有六个标准的数据类型:Number(数字),String(字符 ...
- Connection reset by peer原理解析
“Connection reset by peer”代表什么?“Connection reset by peer”表示当前服务器接受到了通信对端发送的TCP RST信号,即通信对端已经关闭了连接,通过 ...
- html迪士尼网页实现代码
html body> <div> <!-- 导航设置 --> <header> <nav ...