《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++》(第二十一章)理解函数对象
什么是函数对象? 函数对象是一种特殊类型的类,它重载了函数调用操作符 operator(),使得类的实例可以像函数一样被调用。 什么是谓词? 谓词是指一个能够返回布尔值(true或false)的函数或函数对象 1.一元函数…...
2024.1.1 IntelliJ IDEA 使用记录
2024.1.1 IntelliJ IDEA 使用记录 下载设置文件编码maven 配置 插件可以中文语言包安装lombok 插件Smart Tomcat ( 根据需要安装)Smart Tomcat 配置 热部署(非必须的)解决Intellij IDEA运行报Command line is too long的问题 项目导入java 设置maven 配置…...
扩展van Emde Boas树以支持卫星数据:设计与实现
扩展van Emde Boas树以支持卫星数据:设计与实现 1. 引言2. vEB树的基本概念3. 支持卫星数据的vEB树设计3.1 数据结构的扩展3.2 操作的修改3.3 卫星数据的存储和检索 4. 详细设计和实现4.1 定义卫星数据结构体4.2 修改vEB树节点结构4.3 插入操作的伪代码4.4 C语言实现…...
玩游戏专用远程控制软件
玩游戏专用远程控制软件:实现远程游戏的新体验 随着网络技术的不断发展和创新,远程控制软件已经逐渐渗透到我们生活的方方面面,尤其是在游戏领域。玩游戏专用远程控制软件,作为这一趋势下的产物,为玩家提供了全新的游…...
机器人规划控制——工程化——心得日记-20240510
近一周一直在调试机器人过迷宫形路线,这种路线特点是障碍物之间距离较小且障碍物也比较多,基本机器人会一直发生干涉检测,请求全局路径,然后再控制机器人前进。 遇到一个特别有趣的问题,当然最后查出来原因也感觉比较…...
2024年成都市标杆场景项目申报条件对象、奖励和认定材料流程
一、申报条件 (一)申报主体需注册成立两年以上,具备独立法人资格,在成都有固定经营或者生产场地,上两年度主营业务收入年均1000万元以上或上两年度主营业务收入增长率年均10%以上; (二&#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特点及优缺点总结 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃…...
三下乡社会实践投稿攻略在这里
在当今信息爆炸的时代,如何让自己的声音被更多人听到,成为许多人和企业所关心的问题。其中,向各大媒体网站投稿,成为了一种常见的宣传方式。但是,如何投稿各大媒体网站?新闻媒体发文策略又有哪些呢…...
银河麒麟桌面版开机后网络无法自动链接 麒麟系统开机没有连接ens33
1.每次虚拟机开机启动麒麟操作系统,都要输入账号,密码。 进入点击这个ens33 内网才连接 2. 如何开机就脸上呢? 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容器,默认启动端口为80,可以进行修改 docker run -i -t …...
linux上用Jmter进行压测
在上一篇中安装好了Jmeter环境,在这一篇中将主要分享如何使用jmeter在linux中进行单机压测。 1.项目部署 在这里我们先简单部署一下测试环境,所用到的项目环境是个jar包,先在linux上home目录下新建app目录,然后通过rz命令将项目ja…...
【Java代码审计】代码审计的方法及常用工具
【Java代码审计】代码审计的方法及常用工具 代码审计的常用思路代码审计辅助工具代码编辑器测试工具反编译工具Java 代码静态扫描工具 代码审计的常用思路 1、接口排查(“正向追踪”):先找出从外部接口接收的参数,并跟踪其传递过…...
我国吻合器市场规模不断扩大 国产化率有所增长
我国吻合器市场规模不断扩大 国产化率有所增长 吻合器是替代手工切除或缝合的一种医疗器械,其工作原理与订书机十分相似,可利用钛钉对组织进行离断或吻合。经过多年发展,吻合器种类逐渐增多,根据手术方式不同,吻合器大…...
深度剖析Comate智能产品:科技巧思,实用至上
文章目录 Comate智能编码助手介绍Comate应用场景Comate语言与IDE支持 Comate安装步骤Comate智能编码使用体验代码推荐智能推荐生成单测注释解释注释生成智能问答 Comate实战演练总结 Comate智能编码助手介绍 市面上现在有很多智能代码助手,当时互联网头部大厂百度也…...
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)创建vnc配置文件2)修改配置文件内容3)完整配置文件参考 2.3、设置vnc密码2.4、配置防火…...
设计模式-08 - 模板方法模式 Template Method
设计模式-08 - 模板方法模式 Template Method 1.定义 模板方法模式是一种设计模式,它定义了一个操作的骨架,而由子类来决定如何实现该操作的某些步骤。它允许子类在不改变算法结构的情况下重定义算法的特定步骤。 模板方法模式适合用于以下情况&am…...
Android 适配阿拉伯语之vector图标镜像
Android 适配阿拉伯语之vector图标镜像 android:autoMirrored“true” 属性简单而直接的方法来自动处理 RTL 环境中图标的翻转。 使用 android:autoMirrored“true” 在 Vector Drawable 中是一种非常方便的方法,因为它允许你使用相同的 drawable 资源来适应不同的…...
推荐4个可用的github国内镜像
Github是全球最大的代码托管云平台,超过1亿用户在平台上分享代码及数据,深受生物信息学软件开发者的喜爱,并且现在发表文章,若涉及到代码,编辑还要求我们把代码及数据存放在github上,以便检查数据的真实性和…...
从项目开始学习Vue——02(若依框架)
往期: 从项目开始学习Vue——01 目录标题 一、基础插件(一)路由Vue Router(二)导航守卫(路由拦截器)二、Vuex(一)什么是VuexVuex的部分介绍内容: (…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...
32位寻址与64位寻址
32位寻址与64位寻址 32位寻址是什么? 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元(地址),其核心含义与能力如下: 1. 核心定义 地址位宽:CPU或内存控制器用32位…...
