当前位置: 首页 > news >正文

《21天学通C++》(第二十一章)理解函数对象

什么是函数对象?
函数对象是一种特殊类型的类,它重载了函数调用操作符 operator(),使得类的实例可以像函数一样被调用。
什么是谓词?
谓词是指一个能够返回布尔值(true或false)的函数或函数对象

1.一元函数

一元函数是指接受单个参数的函数

#include <iostream>
#include <vector>
#include <algorithm>// 定义一元函数对象,用于打印整数
struct Print {//定义一个结构体void operator()(int x) const {//重载operator()std::cout << x << " ";}
};int main() {std::vector<int> numbers = {1, 2, 3, 4, 5};// 使用一元函数对象显示集合内容std::for_each(numbers.begin(), numbers.end(), Print());//开始迭代器,结束迭代器,操作函数(函数对象或Lambda表达式)//调用Print()std::cout << std::endl;system("pause");return 0;
}

2.一元谓词

一元谓词是一种特殊的一元函数,它接受单个参数并返回一个布尔值

#include <iostream>
#include <vector>
#include <algorithm>// 定义一个一元谓词,用于判断是否为某个数字的整数
struct IsMultipleOf {//int Divisor;IsMultipleOf(int Divisor) : Divisor(Divisor) {}bool operator()(int number) const {//重载operator(),返回布尔值return ((number % Divisor) == 0);}
};int main() {std::vector<int> numbers = {1, 2, 3, 4, 10};// 使用一元谓词 IsMultipleOf 来查找第一个是5的倍数的数字auto it = std::find_if(numbers.cbegin(), numbers.cend(), IsMultipleOf(5));if (it != numbers.cend()) {std::cout << "The  number is: " << *it << std::endl;} else {std::cout << "No number" << std::endl;}system("pause");return 0;
}

3.二元函数

一元函数是指接受两个参数的函数

#include <iostream>
#include <vector>
#include <algorithm>// 定义一个二元函数,实现两个数相乘
struct AddFunctor {//定义一个结构体int operator()(int a, int b) const {//重载operator()return a * b;}
};int main() {std::vector<int> numbers1 = {1, 2, 3, 4, 5};std::vector<int> numbers2 = {5, 4, 4, 2, 2};// 使用二元函数计算两个向量对应元素的乘积std::vector<int> result(numbers1.size());//定义一个新的vector用来存储结果std::transform(numbers1.begin(), numbers1.end(), numbers2.begin(), result.begin(), AddFunctor());//调用AddFunctor()// 显示结果for (int num : result) {std::cout << num << " ";}std::cout << std::endl;system("pause");return 0;
}

4.二元谓词

一元谓词是一种特殊的二元函数,它接受两个参数并返回一个布尔值

#include <iostream>
#include <vector>
#include <algorithm>// 二元谓词,用于比较两个整数的大小
struct GreaterThan {bool operator()(int a, int b) const {return a > b;  // 返回 a 是否大于 b}
};int main() {std::vector<int> numbers = {10, 20, 30, 40, 50};// 使用二元谓词对向量进行降序排序std::sort(numbers.begin(), numbers.end(), GreaterThan());// 输出排序后的向量for (int num : numbers) {std::cout << num << " ";}std::cout << std::endl;system("pause");return 0;
}

相关文章:

《21天学通C++》(第二十一章)理解函数对象

什么是函数对象&#xff1f; 函数对象是一种特殊类型的类&#xff0c;它重载了函数调用操作符 operator()&#xff0c;使得类的实例可以像函数一样被调用。 什么是谓词&#xff1f; 谓词是指一个能够返回布尔值&#xff08;true或false&#xff09;的函数或函数对象 1.一元函数…...

2024.1.1 IntelliJ IDEA 使用记录

2024.1.1 IntelliJ IDEA 使用记录 下载设置文件编码maven 配置 插件可以中文语言包安装lombok 插件Smart Tomcat ( 根据需要安装)Smart Tomcat 配置 热部署&#xff08;非必须的&#xff09;解决Intellij IDEA运行报Command line is too long的问题 项目导入java 设置maven 配置…...

扩展van Emde Boas树以支持卫星数据:设计与实现

扩展van Emde Boas树以支持卫星数据&#xff1a;设计与实现 1. 引言2. vEB树的基本概念3. 支持卫星数据的vEB树设计3.1 数据结构的扩展3.2 操作的修改3.3 卫星数据的存储和检索 4. 详细设计和实现4.1 定义卫星数据结构体4.2 修改vEB树节点结构4.3 插入操作的伪代码4.4 C语言实现…...

玩游戏专用远程控制软件

玩游戏专用远程控制软件&#xff1a;实现远程游戏的新体验 随着网络技术的不断发展和创新&#xff0c;远程控制软件已经逐渐渗透到我们生活的方方面面&#xff0c;尤其是在游戏领域。玩游戏专用远程控制软件&#xff0c;作为这一趋势下的产物&#xff0c;为玩家提供了全新的游…...

机器人规划控制——工程化——心得日记-20240510

近一周一直在调试机器人过迷宫形路线&#xff0c;这种路线特点是障碍物之间距离较小且障碍物也比较多&#xff0c;基本机器人会一直发生干涉检测&#xff0c;请求全局路径&#xff0c;然后再控制机器人前进。 遇到一个特别有趣的问题&#xff0c;当然最后查出来原因也感觉比较…...

2024年成都市标杆场景项目申报条件对象、奖励和认定材料流程

一、申报条件 &#xff08;一&#xff09;申报主体需注册成立两年以上&#xff0c;具备独立法人资格&#xff0c;在成都有固定经营或者生产场地&#xff0c;上两年度主营业务收入年均1000万元以上或上两年度主营业务收入增长率年均10%以上&#xff1b; &#xff08;二&#x…...

前端Vue uView 组件<u-search> 自定义右侧搜索按钮样式

前言 uView 文档的效果不是ui设计的样式 需要重新编辑 原效果 ui设计效果 解决方案 设置里说明的需要传一个样式对象 这个对象 需要写在 script 标签里面 这里需要遵循驼峰命名 比如font-size 改为 fontSize lineHeight和textAlign为水平锤子居中效果 searchStyle: {ba…...

【Linux网络编程】I/O多路转接之select

select 1.初识select2.了解select基本概念和接口介绍3.select服务器4.select特点及优缺点总结 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603;…...

三下乡社会实践投稿攻略在这里

在当今信息爆炸的时代&#xff0c;如何让自己的声音被更多人听到&#xff0c;成为许多人和企业所关心的问题。其中&#xff0c;向各大媒体网站投稿&#xff0c;成为了一种常见的宣传方式。但是&#xff0c;如何投稿各大媒体网站&#xff1f;新闻媒体发文策略又有哪些呢&#xf…...

银河麒麟桌面版开机后网络无法自动链接 麒麟系统开机没有连接ens33

1.每次虚拟机开机启动麒麟操作系统&#xff0c;都要输入账号&#xff0c;密码。 进入点击这个ens33 内网才连接 2. 如何开机就脸上呢&#xff1f; 2.1. 进入 cd /etc/sysconfig/network-scripts 2.2 修改参数 onbootyes 改为yes 2.3 重启即可 a. 直接重启机器查看是否正常&…...

vue+onlyOffice+java : 集成在线编辑word并保存

1.docker部署onlyOffice 1.1拉取最新版onlyOffice镜像 sudo docker pull onlyoffice/documentserver 1.2运行以下命令运行容器 其中 -v 后的第一部分是挂载自己的linux的哪个目录 # 启动docker容器&#xff0c;默认启动端口为80&#xff0c;可以进行修改 docker run -i -t …...

linux上用Jmter进行压测

在上一篇中安装好了Jmeter环境&#xff0c;在这一篇中将主要分享如何使用jmeter在linux中进行单机压测。 1.项目部署 在这里我们先简单部署一下测试环境&#xff0c;所用到的项目环境是个jar包&#xff0c;先在linux上home目录下新建app目录&#xff0c;然后通过rz命令将项目ja…...

【Java代码审计】代码审计的方法及常用工具

【Java代码审计】代码审计的方法及常用工具 代码审计的常用思路代码审计辅助工具代码编辑器测试工具反编译工具Java 代码静态扫描工具 代码审计的常用思路 1、接口排查&#xff08;“正向追踪”&#xff09;&#xff1a;先找出从外部接口接收的参数&#xff0c;并跟踪其传递过…...

我国吻合器市场规模不断扩大 国产化率有所增长

我国吻合器市场规模不断扩大 国产化率有所增长 吻合器是替代手工切除或缝合的一种医疗器械&#xff0c;其工作原理与订书机十分相似&#xff0c;可利用钛钉对组织进行离断或吻合。经过多年发展&#xff0c;吻合器种类逐渐增多&#xff0c;根据手术方式不同&#xff0c;吻合器大…...

深度剖析Comate智能产品:科技巧思,实用至上

文章目录 Comate智能编码助手介绍Comate应用场景Comate语言与IDE支持 Comate安装步骤Comate智能编码使用体验代码推荐智能推荐生成单测注释解释注释生成智能问答 Comate实战演练总结 Comate智能编码助手介绍 市面上现在有很多智能代码助手&#xff0c;当时互联网头部大厂百度也…...

Centos 7.9 配置VNCServer实现远程vnc连接

文章目录 1、Centos安装图形界面1.1、安装X Windows System图形界面1.2、安装GNOME图形界面 2、VNC SERVER配置2.1、VNC SERVER安装2.2、VNC SERVER配置1&#xff09;创建vnc配置文件2&#xff09;修改配置文件内容3&#xff09;完整配置文件参考 2.3、设置vnc密码2.4、配置防火…...

设计模式-08 - 模板方法模式 Template Method

设计模式-08 - 模板方法模式 Template Method 1.定义 模板方法模式是一种设计模式&#xff0c;它定义了一个操作的骨架&#xff0c;而由子类来决定如何实现该操作的某些步骤。它允许子类在不改变算法结构的情况下重定义算法的特定步骤。 模板方法模式适合用于以下情况&am…...

Android 适配阿拉伯语之vector图标镜像

Android 适配阿拉伯语之vector图标镜像 android:autoMirrored“true” 属性简单而直接的方法来自动处理 RTL 环境中图标的翻转。 使用 android:autoMirrored“true” 在 Vector Drawable 中是一种非常方便的方法&#xff0c;因为它允许你使用相同的 drawable 资源来适应不同的…...

推荐4个可用的github国内镜像

Github是全球最大的代码托管云平台&#xff0c;超过1亿用户在平台上分享代码及数据&#xff0c;深受生物信息学软件开发者的喜爱&#xff0c;并且现在发表文章&#xff0c;若涉及到代码&#xff0c;编辑还要求我们把代码及数据存放在github上&#xff0c;以便检查数据的真实性和…...

从项目开始学习Vue——02(若依框架)

往期&#xff1a; 从项目开始学习Vue——01 目录标题 一、基础插件&#xff08;一&#xff09;路由Vue Router&#xff08;二&#xff09;导航守卫&#xff08;路由拦截器&#xff09;二、Vuex&#xff08;一&#xff09;什么是VuexVuex的部分介绍内容&#xff1a; &#xff08…...

使用JavaScript日历小部件和DHTMLX Gantt的应用场景(二)

DHTMLX Suite UI 组件库允许您更快地构建跨平台、跨浏览器 Web 和移动应用程序。它包括一组丰富的即用式 HTML5 组件&#xff0c;这些组件可以轻松组合到单个应用程序界面中。 DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表&#xff0c;可满足项目管理应用…...

springboot整合redis多数据源(附带RedisUtil)

单数据源RedisUtil(静态) 单数据源RedisUtil,我这里implements ApplicationContextAware在setApplicationContext注入redisTemplate,工具类可以直接类RedisUtil.StringOps.get()使用 package com.vehicle.manager.core.util;import com.alibaba.fastjson.JSON; import lombok.e…...

Web实时通信的学习之旅:SSE(Server-Sent Events)的技术详解及简单示例演示

文章目录 一、什么是SSE二、SSE技术的基本原理三、SSE适用于场景四、Node服务端示例1、协议2、格式3、事件3.1、事件3.2、事件唯一标识符3.3、重连事件 4、具体示例 五、客户端示例1、检测客户端是否支持SSE2、创建客户端连接3、事件监听4、接收事件5、自定义事件6、错误处理7、…...

Apache Flume事务

Apache Flume 中的事务处理是指 Flume Agent 在处理事件流时的一种机制&#xff0c;用于确保数据的可靠传输和处理。 1. 事务概述&#xff1a; Flume 中的事务是指一组事件的传输和处理&#xff0c;这些事件在传输过程中要么全部成功完成&#xff0c;要么全部失败&#xff0…...

根据部门id删除该部门下的员工(事务)

application.properties&#xff1a; 或&#xff1a; application.yml&#xff1a; 新表&#xff1a; 日志对象类&#xff1a; 日志service类&#xff1a; 日志service接口&#xff1a; 日志mapper类&#xff1a; 部门service类&#xff1a; 员工mapper类&#xff1a;...

Java之String类

一、String类常用方法 1.引用类型的比较 我们知道在Java中两个引用遍历是不能用" "号来比较的&#xff0c;而String类重写了父类objects的equals方法&#xff0c; 实现了引用类型的比较 例子 import java.util.Scanner; public class Main { public static void…...

es终止快照恢复进程的方法

方法1、删除索引可以终止&#xff0c;恢复进程。 DELETE index_* // 按通配符删除以index_开头的索引 DELETE _all // 删除全部索引 POST *,-.*/_close 关闭索引 POST *,-.*/_open 打开索引 DELETE *,-.* 删除全部索引方法2、强制重启es 集群也可也终…...

ubantu安装rabbbitmq

ubantu安装rabbbitmq 安装Erlang1、在linux下直接安装2、上传Erlang文件后解压 安装rabbitmq开启web管理接口创建用户及修改guest密码&#xff0c;删除guest默认账号 安装Erlang 1、在linux下直接安装 #运行以下命令直接安装&#xff1a; sudo apt-get install erlang#可运行…...

了解 条码工具 Dynamsoft 在条码读取器中的形态运算

在图像处理中&#xff0c;术语形态学是指分析形状以填充小孔、去除噪声、提取轮廓等的一组操作。形态学操作很像空间卷积中的过滤过程。有两个部分在起作用&#xff1a;结构元素和预定义的计算规则。 点击下载Dynamsoft最新版https://www.evget.com/product/3691/download 结…...

NIO和NIO.2对比

Java NIO (New Input/Output) 是从Java 1.4版本开始引入的一个新的I/O API&#xff0c;用于替代原来的BIO&#xff08;Blocking I/O&#xff09;API。NIO提供了更加灵活和高效的网络通信方式&#xff0c;特别适合于高吞吐量的网络编程。NIO的主要特点是非阻塞模式&#xff0c;它…...