c++函数对象(仿函数)、谓词、内建函数对象
1、函数对象
1.1 概念
重载函数调用操作符的类,这个类的对象就是函数对象,在使用这个函数对象对应使用重载的()符号时,行为类似于函数调用,因此这个函数也叫仿函数。
注意:函数对象(仿函数)是一个类,不是函数。
特点:
a)函数对象可以传入参数、返回值。
b)可以使用类的成员参数记录函数对象的状态。
c)函数对象可以作为参数传递。
1.2 示例
特点a、b使用:
//创建一个函数对象,
class Print {
public:void operator()(string &tex) {cout << tex << endl;pNum++;}int pNum{};
};int main() {string word{ "speak sth!" };Print print;print(word);print(word);print(word);print(word);cout << "" << print.pNum << endl;;system("pause");return 0;
}
特点c:
class mData {
public:mData(int x,float y) {this->mX = x;this->mY = y;}~mData(){}int mX{};float mY{};
};class Sort {
public:bool operator()(mData& md1, mData& md2) {return md1.mX > md2.mX;}
};
void func(mData& md1, mData& md2) {Sort st;if (st(md1, md2)) {cout << " a > b" << endl;}else {cout << " a < b" << endl;}
}
int main() {vector<mData> vP{};vP.push_back(mData(1, 2.));vP.push_back(mData(4, 12.));func(vP[0], vP[1]);system("pause");return 0;
}
2、谓词
2.1 概念
返回bool类型的仿函数为谓词,()内有一个参数为一元谓词、有两个参数为二元谓词。
2.2示例
一元谓词:
//一元谓词创建:一元谓词bool返回值,一个传入参数
class findPass7 {
public:bool operator()(int val) {return val > 5;}
};
int main() {vector<int> v1;for (int i = 0; i < 10; ++i) {v1.push_back(i);}vector<int>::iterator iter = find_if(v1.begin(), v1.end(), findPass7());if (iter != v1.end()) {cout << "找到5,位于:" << (*iter) << endl;}else {cout << "没找到"<< endl;}system("pause");return 0;
}
注:如果想在stl中使用自定义的数据,类型,首先看这个函数有没有相关的重载,如下函数最右边的 _Pred。

使用二元谓词实现对自定义类的成员参数排序:
class Person {
public:Person(int age, int length) {this->mAge = age;this->mLength = length;}int mAge;int mLength;
};
class getAgeMid {
public:bool operator()(Person& p1, Person& p2) {return p1.mAge > p2.mAge;}
};
int main() {vector<Person> Ps;Ps.push_back(Person(10,23));Ps.push_back(Person(20, 33));Ps.push_back(Person(50, 13));Ps.push_back(Person(40, 53));Ps.push_back(Person(30, 73));sort(Ps.begin(), Ps.end(), getAgeMid());for (vector<Person>::iterator iter = Ps.begin(); iter != Ps.end(); iter++) {cout << (*iter).mAge << " ";}cout << endl;system("pause");return 0;
}
3、stl内建函数对象
3.1 分类与用法
算术仿函数、关系仿函数、逻辑仿函数。
引入头文件 : #include <functional> 即可使用
3.2 算术仿函数
功能:实现四则运算,negate是一元运算,其余都为二元运算。
仿函数原型:

//初始化算术仿函数plus<int> p;negate<int> ng;p(a, b);ng(79);
3.3 关系仿函数
功能:实现关系对比。
仿函数原型:

利用内建仿函数实现降序排序:
int main() {vector<int> v1;v1.push_back(10);v1.push_back(20);v1.push_back(50);v1.push_back(30);v1.push_back(40);for (vector<int>::iterator iter = v1.begin(); iter != v1.end(); iter++) {cout << (*iter) << " ";}cout << endl;sort(v1.begin(), v1.end(), greater<int>());for (vector<int>::iterator iter = v1.begin(); iter != v1.end(); iter++) {cout << (*iter) << " ";}cout << endl;system("pause");return 0;
}
3.4 逻辑仿函数
功能:实现逻辑运算。
仿函数原型:

相关文章:
c++函数对象(仿函数)、谓词、内建函数对象
1、函数对象 1.1 概念 重载函数调用操作符的类,这个类的对象就是函数对象,在使用这个函数对象对应使用重载的()符号时,行为类似于函数调用,因此这个函数也叫仿函数。 注意:函数对象࿰…...
物联网对供应链管理的影响
物联网对于许多行业来说都是一项革命性技术,其应用领域涉及零售、交通、金融、医疗保健和能源等行业。物联网在供应链等流程中已经展示了其深度的潜力。管理、预测和监督应用程序有助于车队运输经理提高配送的运营效率,并增加决策的准确性。如今…...
c++ 那些事 笔记
GitHub - Light-City/CPlusPlusThings: C那些事 1. ① extern extern关键字,C语言extern关键字用法详解 如果全局变量不在文件的开头定义,其有效的作用范围只限于其定义处到文件结束。如果在定义点之前的函数想引用该全局变量,则应该在…...
心跳机制Redis
进入命令传播阶段候,master与slave间需要进行信息交换,使用心跳机制进行维护,实现双方连接保持在线 master心跳: 指令:PING 周期:由repl-ping-slave-period决定,默认10秒 作用&#…...
蓝桥杯算法训练合集十七 1.数字反转2.试题39713.矮人采金子4.筛法5.机器指令
目录 1.数字反转 2.试题3971 3.矮人采金子 4.筛法 5.机器指令 1.数字反转 问题描述 给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零&…...
第一章 初识 Spring Security
第一章 初识 Spring Security 1、权限管理 权限管理 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现了对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资…...
2023-02-20 关于回朔的思考
摘要: 考虑命运来回动荡交织,一些新的规划在不断的扩充, 而一些历史则开始陷入回朔。 有必要对历史和过往做一些规划和思考。 需要注意在这个阶段, 第一优先级是在反刍中将其最大化。 理论层: 一. 数据库的基础理论 ANSI SQL到词法解析和语法解析mysql的SQL层对…...
推荐系统[八]算法实践总结V1:淘宝逛逛and阿里飞猪个性化推荐:召回算法实践总结【冷启动召回、复购召回、用户行为召回等算法实战】
0.前言:召回排序流程策略算法简介 推荐可分为以下四个流程,分别是召回、粗排、精排以及重排: 召回是源头,在某种意义上决定着整个推荐的天花板;粗排是初筛,一般不会上复杂模型;精排是整个推荐环节的重中之重,在特征和模型上都会做的比较复杂;重排,一般是做打散或满足…...
适合初学者的超详细实用调试技巧(下)
我们日常写代码的时候,常常会遇到bug的情况,这个时候像我这样的初学者就会像无头苍蝇一样这里改改那里删删,调试的重要性也就显现出来,这篇文章接着上文来讲解。 上文地址:(8条消息) 适合初学者的超详细实用调试技巧&…...
C# String与StringBuilder 的区分
重点 1)它是比较的栈里面的值是否相等(值比较) 2)Equals它比较的是堆里面的值是否相等(引用地址值比较) 3)Object.ReferenceEquals(obj1,obj2)它是比较的是内存地址是否相等 问题描述: 今日提交代码时候,被检测工具发出修改建议。遂补充一下知识 1.什么…...
【麒麟】基于GPS北斗卫星技术的NTP网络时间服务器
【麒麟】基于GPS北斗卫星技术的NTP网络时间服务器 【麒麟】基于GPS北斗卫星技术的NTP网络时间服务器 麒麟系统NTP授时方案 设计思路: 在通用的麒麟服务器内部固定一块北斗卫星接收模块并引出卫星天线接口,卫星模块接收北斗卫星数据并解码输出时间数据&…...
“互联网+”下劳动关系认定的现状
1. 劳动关系的认定标准。依据目前我国法律的有关规定, 判定劳动关系存在两种情况:其一, 在有书面劳动合同的情况下, 这时应以书面合同作为认定标准;其二, 在没有书面合同的情况下, 则依据2005年劳社部的《关于确立劳动关系有关事项的通知》来认定, 其中第一条:“用人单位招用劳…...
LPWAN及高效弹性工业物联网核心技术方案
20多年前的一辆拖拉机就是一个纯机械的产品,里面可能并没有电子或者软件的构成;而随后随着软件的发展,拖拉机中嵌入了软件,它能控制发动机的功率及拖拉机防抱死系统;接下来,通过融入各种软件,拖…...
OPTIONS FMTSEARCH
FMTSEARCH 指定要检索的格式目录列表,语法如下:OPTIONS FMTSEARCH(catalog-specification-1<catalog-specification-2 … >);使用PROC FORMAT时可以定义格式目录,LIBRARYlibref或LIBRARYlibref.catalog。格式目录可以是libref或libref.…...
Python3 pip
Python3 pip pip 是 Python 包管理工具,该工具提供了对 Python 包的查找、下载、安装、卸载的功能。 软件包也可以在 https://pypi.org/ 中找到。 目前最新的 Python 版本已经预装了 pip。 注意:Python 2.7.9 或 Python 3.4 以上版本都自带 pip 工具…...
【2023-02-20】JS逆向之翼支付
提示:文章仅供参考,禁止用于非法途径 文章目录前言分析总结前言 真的好久没更了…… 提示:以下是本篇文章正文内容,下面案例可供参考 分析 进到网页,加载两个接口 applyLoginFactor 接口返回一个RSA公钥࿰…...
假如面试官问你Babel的原理该怎么回答
1. 什么是 Babel 简单地说,Babel 能够转译 ECMAScript 2015 的代码,使它在旧的浏览器或者环境中也能够运行。 // es2015 的 const 和 arrow function const add (a, b) > a b;// Babel 转译后 var add function add(a, b) {return a b; };Babel…...
深入Spring底层透析Bean创建过程之拨云见日篇
目录前言一.BeanFactory快速入门1. BeanFactory创建Bean2. BeanFactory和ApplicationContext的关系3. 和ApplicationContext区别(高频问点)4. BeanFactory的继承体系5. ApplicationContext的继承体系二.Bean实例化的基本流程(重点)前言 首先感谢您的阅览࿰…...
8 狗监控的封装
概述 为了保证嵌入式程序能够长时间稳定地运行,需要加入狗监控机制。狗监控的原理为:应用程序需要每隔一段时间来喂狗或保活,如果应用程序崩溃或者内核崩溃,导致长时间无法喂狗,则狗将超时,会自动重启系统。部分IPC芯片提供了硬件狗,对于没有硬件狗的,需要自行实现软件…...
基于卷积神经网络图像风格迁移系统的设计与实现(flask系统)
1.摘要 Leon Gatys 等人研发的深度神经网络使用神经的表达来分离任意图片的内容和风格,为生成艺术图片提供一个神经算法。本文基于Style Transfer算法,使用风格成本函数训练CNN,用卷积神经网络提取图像特征,依次提取内容图像的内…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
Python环境安装与虚拟环境配置详解
本文档旨在为Python开发者提供一站式的环境安装与虚拟环境配置指南,适用于Windows、macOS和Linux系统。无论你是初学者还是有经验的开发者,都能在此找到适合自己的环境搭建方法和常见问题的解决方案。 快速开始 一分钟快速安装与虚拟环境配置 # macOS/…...
HTML中各种标签的作用
一、HTML文件主要标签结构及说明 1. <!DOCTYPE html> 作用:声明文档类型,告知浏览器这是 HTML5 文档。 必须:是。 2. <html lang“zh”>. </html> 作用:包裹整个网页内容,lang"z…...
[10-1]I2C通信协议 江协科技学习笔记(17个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17...
【基于阿里云搭建数据仓库(离线)】使用UDTF时出现报错“FlatEventUDTF cannot be resolved”
目录 问题: 可能的原因有: 解决方法: 问题: 已经将包含第三方依赖的jar包上传到dataworks,并且成功注册函数,但是还是报错:“FlatEventUDTF cannot be resolved”,如下:…...
