C++ 补充之常用遍历算法
C++遍历算法和原理
C++标准库提供了丰富的遍历算法,涵盖了各种不同的功能。以下是一些常见的C++遍历算法以及它们的概念和原理的简要讲解:
-
for_each:对容器中的每个元素应用指定的函数。
- 概念:对于给定的容器和一个可调用对象,该算法将依次对容器中的每个元素调用该可调用对象。
- 原理:通过迭代器遍历容器,对每个元素都应用给定的可调用对象。
-
find:在容器中查找指定值第一次出现的位置。
- 概念:给定一个容器和一个值,该算法返回指向第一个等于该值的元素的迭代器。若未找到,则返回迭代器指向容器的末尾。
- 原理:通过线性搜索,逐个比较容器中的元素与指定的值,直到找到相等的元素。
-
find_if:在容器中查找满足条件的第一个元素。
- 概念:给定一个容器和一个谓词(可判断元素是否满足条件的函数或函数对象),该算法返回指向第一个满足条件的元素的迭代器。若未找到,则返回迭代器指向容器的末尾。
- 原理:通过线性搜索,逐个对容器中的元素应用谓词,直到找到满足条件的元素。
-
count:统计某个值在容器中出现的次数。
- 概念:给定一个容器和一个值,该算法返回容器中与该值相等的元素的数量。
- 原理:通过迭代器遍历容器,对每个元素与给定值进行比较并计数。
-
sort:对容器中的元素进行排序。
- 概念:对给定的容器中的元素进行排序,按一定的排序规则进行。
- 原理:使用排序算法(如快速排序、归并排序等)对容器中的元素进行排序。
-
transform:对容器中的每个元素执行某种转换。
- 概念:给定一个容器和一个转换操作(比如函数、函数对象),该算法会对容器中的每个元素进行转换操作,并将结果存储在另一个容器中。
- 原理:通过迭代器遍历容器,对每个元素应用给定的转换操作并将结果存储到另一容器中。
-
copy:将容器中的元素复制到另一个容器中。
- 概念:给定一个源容器和一个目标容器,该算法将源容器中的元素复制到目标容器中,并返回指向目标容器最后一个元素之后位置的迭代器。
- 原理:通过迭代器遍历源容器,将每个元素复制到目标容器中。
-
reverse:反转容器中的元素顺序。
- 概念:给定一个容器,该算法将容器中的元素顺序进行反转。
- 原理:通过迭代器遍历容器,使用两个迭代器指向首尾元素,依次交换它们的值,从而达到反转顺序的目的。
-
unique:去除容器中相邻重复的元素。
- 概念:给定一个容器,该算法移除容器中连续出现的重复元素,只保留其中一个。
- 原理:通过迭代器遍历容器,比较相邻的元素并移除重复元素。
-
adjacent_find:查找容器中相邻重复的元素。
- 概念:给定一个容器,该算法返回指向第一组连续相同元素的迭代器。若未找到,则返回迭代器指向容器的末尾。
- 原理:通过线性搜索,逐个比较容器中的相邻元素,找到第一组相同元素。
以上是一些常见的C++遍历算法的概念和原理简介。通过使用这些算法,可以方便地对容器中的元素进行各种不同的操作和处理。
今天要讲的遍历算法是:foreach,transform,find
C++遍历算法for_each
在C++标准库中,并没有名为foreach的遍历算法,但是可以通过使用for_each算法来达到类似的效果。for_each算法是对容器中的每个元素应用指定的函数。下面我将详细介绍for_each算法并举例说明其用法:
for_each算法概念:
for_each算法接受一个可调用对象(函数、函数对象或Lambda表达式)和一个范围(通常是容器),然后对范围内的每个元素都依次调用这个可调用对象。它不会改变容器中的元素,只是对每个元素进行处理。
示例代码:
#include <iostream>
#include <vector>
#include <algorithm>void printSquare(int x) {std::cout << x * x << " ";
}int main() {std::vector<int> numbers = {1, 2, 3, 4, 5};// 使用for_each算法,对容器中的每个元素调用printSquare函数std::for_each(numbers.begin(), numbers.end(), printSquare);return 0;
}
示例解释:
- 在示例代码中,我们首先定义了一个打印平方的函数printSquare。
- 然后定义了一个包含数字的vector容器numbers。
- 在主函数中,我们使用for_each算法,对numbers容器中的每个元素都调用printSquare函数,输出每个元素的平方值。
- 最后程序输出结果为:1 4 9 16 25。
通过for_each算法,可以方便地对容器中的每个元素进行操作,而不需要显式地编写循环。可以根据实际需求传入不同的函数或Lambda表达式来对容器中的元素进行处理。
C++遍历算法transform
transform算法概念:
transform算法用于对序列中的每个元素应用指定的操作,并将结果存储在另一个序列中。这个算法可以看作是一种投影操作,将一个序列映射到另一个序列。
示例代码:
#include <iostream>
#include <vector>
#include <algorithm>int square(int x) {return x * x;
}int main() {std::vector<int> numbers = {1, 2, 3, 4, 5};std::vector<int> squared_numbers;// 使用transform算法,将numbers中的每个元素求平方,存储到squared_numbers中std::transform(numbers.begin(), numbers.end(), std::back_inserter(squared_numbers), square);// 输出squared_numbers中的元素for (int num : squared_numbers) {std::cout << num << " ";}return 0;
}
示例解释:
- 在示例代码中,我们定义了一个函数square,用于计算输入的值的平方。
- 首先创建了一个包含数字的vector容器numbers和一个空的vector容器squared_numbers。
- 然后使用transform算法,将numbers中的每个元素应用square函数进行平方操作,结果存储在squared_numbers中。
- 最后使用for循环打印输出squared_numbers中的元素,即每个数的平方值。
- 输出结果为:1 4 9 16 25。
通过transform算法,可以方便地对容器中的每个元素进行转换操作,并将结果存储在另一个容器中,减少了显式循环的编写。 transform算法提供了一种简洁而高效的方法来处理容器元素的映射操作。
C++遍历算法find
find算法概念:
find算法用于在容器中查找指定值第一次出现的位置,返回指向第一个等于该值的元素的迭代器,若未找到,则返回迭代器指向容器的末尾。
示例代码:
#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> numbers = {1, 2, 3, 4, 5};// 在numbers中查找值为3的元素auto it = std::find(numbers.begin(), numbers.end(), 3);// 判断是否找到if (it != numbers.end()) {std::cout << "找到了值为3的元素,位置在索引 " << std::distance(numbers.begin(), it) << std::endl;} else {std::cout << "未找到值为3的元素" << std::endl;}return 0;
}
示例解释:
- 示例代码定义了一个包含数字的vector容器numbers。
- 使用find算法在numbers中查找值为3的元素,将返回值为3的元素的迭代器。
- 判断返回的迭代器是否指向了容器末尾,如果没有,打印出找到元素的位置;否则提示未找到元素。
- 输出结果为:“找到了值为3的元素,位置在索引 2”。
通过find算法,可以快速在容器中查找特定值第一次出现的位置。如果找到了指定值,find将返回指向该元素的迭代器;否则返回迭代器指向容器末尾,可以通过判断迭代器是否等于end()来确定是否找到了目标元素。这个算法在实际开发中经常被使用。
关注我,不迷路,共学习,同进步
关注我,不迷路,共学习,同进步
相关文章:

C++ 补充之常用遍历算法
C遍历算法和原理 C标准库提供了丰富的遍历算法,涵盖了各种不同的功能。以下是一些常见的C遍历算法以及它们的概念和原理的简要讲解: for_each:对容器中的每个元素应用指定的函数。 概念:对于给定的容器和一个可调用对象ÿ…...

【Linux杂货铺】调试工具gdb的使用
目录 🌈前言🌈 📁背景介绍 📁 使用 list [行号] / [函数名] run/r break/b [行号] / [函数名] info break disable break enable break delete break [断点编号] next/n step/s continue/c finish print/p [变量…...

FL Studio Producer Edition2024中文进阶版Win/Mac
FL Studio Producer Edition,特别是其【中文进阶版 Win/Mac】,是数字音乐制作领域中的一款知名软件。它为广大音乐制作人、声音工程师以及音乐爱好者提供了一个从音乐构思到最终作品发布的完整解决方案。这个版本特别为中文用户优化,并兼容W…...

无需邀请码,Xinstall实现精准分享归因
在如今的移动互联网时代,分享已经成为了我们日常生活中不可或缺的一部分。无论是社交媒体上的好友分享,还是应用内的内容分享,分享都能够帮助我们快速传播信息,扩大影响力。然而,对于开发者而言,分享却带来…...

机器人与AGI会撞出什么火花?
真正的科技变革是不是就要来临了?各方大佬都开始布局机器人,对于普通人的就业会造成什么影响? 优牛企讯-企业动态信息监控专家 在优牛企讯-企业动态监控专家搜索可知,全国目前的机器人公司已经达到了26401家,近一年…...

Linux yum安装pgsql出现Bad GPG signature错误
官方文档:https://www.postgresql.org/download/linux/redhat/ sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install -y postgresql12-server sudo /usr/pgsql-12/bin/…...

第18章-DHCP
1. 产生背景 2. 概述 2.1 定义 2.2 特点 2.3 DHCP系统组成 3. DHCP工作原理 3.1 前提条件 3.2 场景 3.3 分配IP地址工作机制 3.4 特殊情况处理 3.5 IP地址租约更新 4. DHCP中继代理 4.1 现实场景 4.2 工作机制 1. 产生背景 现实问题: 小型网络中&…...

[物联网] OneNet 多协议TCP透传
[物联网] OneNet 多协议TCP透传 STM32物联网–ONENET云平台的多协议接入产品创建 : https://blog.csdn.net/qq_44942724/article/details/134492924 Onenet tcp 透传 : https://blog.csdn.net/flyme2010/article/details/107086001 tcp服务端测试工具 : http://tcp.xnkiot.com/…...

如何让网页APP化 渐进式Web应用(PWA)
前言 大家上网应该发现有的网页说可以安装对应应用,结果这个应用好像就是个web,不像是应用,因为这里采用了PWA相关技术。 PWA,全称为渐进式Web应用(Progressive Web Apps),是一种可以提供类似…...

50 vmalloc 的实现
前言 这里说的是 内核中分配按页分配的场景 常用于 驱动什么的, 分配 中大型空间 由于 连续的 n 个页是分别使用 alloc_pages 分配的, 因此是 虚拟地址空间连续, 但是 物理地址空间不连续 如何分配对象 两个步骤, __get_vm_area_node 获取为 size 分配的 vma 区间, 然后…...

程序员的金三银四求职宝典!
目录 编辑 程序员的金三银四求职宝典 一、为什么金三银四是程序员求职的黄金时期? 二、如何准备金三银四求职? 1. 完善简历 2. 增强技术能力 3. 提前考虑目标公司 4. 提前准备面试 三、程序员求职的常见面试题 1. 数据结构和算法 2. 数据库 …...

day04_拦截器Apifox角色管理(登录校验,API接口文档,权限管理说明,角色管理,添加角色,修改角色,删除角色)
文章目录 1. 登录校验1.1 需求说明1.2 实现思路1.3 ThreadLocal1.4 AuthContextUtil1.5 拦截器使用1.5.1 拦截器开发1.5.2 拦截器注册 1.6 代码优化1.6.1 配置优化1.6.2 代码优化1.6.3 前端修改 2. API接口文档2.1 Apifox接口管理平台2.1.1 接口管理平台简介2.1.2 Apifox简介2.…...

在线上传解压PHP文件代码,压缩/压缩(网站一键打包)支持密码登录
在线上传解压PHP文件代码,压缩/压缩(网站一键打包)支持密码登录 资源宝分享:www.httple.net 如果你没有主机控制面板这个是最好选择,不需要数据库,上传当控制面板使用,无需安装任何扩展,安全高,…...
【刷题】模拟
模拟算法:题目中已经告诉应该怎么做了,只需要模拟即可,思路比较简单,比较考察代码能力。 一般先在草稿纸上模拟流程,如果直接写代码,容易忽视细节,并且不容器调试! 优化策略&#…...

【打工日常】使用docker部署在线Photopea用于linux下替代ps
一、Photopea介绍 linux没有ps适配,对于有时候工作来说确实不方便,我找了很久,才找到了一款功能可以跟ps接近的在线软件,使用docker部署就可以了。它是ps的最佳替代品之一,其界面几乎与ps相同,只不过它是在…...

leetcode 热题 100_盛最多水的容器
题解一: 双指针遍历:容量计算公式为min(左高度,右高度)*底部距离,我们可以令底部距离逐步递减(左右两边的指针向中部移动)。此时对于min(左高度,右高度),假设较高的线向中部移动&…...
基本正则表达式
基本正则表达式 正则命令功能^尖角号,用于模式的最左侧,如“^oldbpy",匹配以oldboy单词开头的行$美元符,用于模式的最右侧,如"oldboy$",表示以oldboy单词结尾的行^$组合符&…...

sqlserver保存微信Emoji表情
首先将数据库字段,设置类型为 nvarchar(200)一个emoji表情,占4字节就可以了,web前端展示不用改任何东西,直接提交数据保存;回显也会没有问题,C#代码不用做任何处理; 不哭不闹要睡觉ἱ…...

网络编程 io_uring
io_uring 1、概述 io_uring是Linux(内核版本在5.1以后)在2019年加入到内核中的一种新型的异步I/O模型; io_uring使用共享内存,解决高IOPS场景中的用户态和内核态的切换过程,减少系统调用;用户可以直接向…...
Java中的static
Java中的static 同一个类的静态变量共享同一个内存空间,即静态变量也就是被 static 关键字修饰的变量。它可以被类的所有实例共享,无论一个类创建了多少个对象,它们都共享同一份静态变量。从变量在内存中的存储方式来看,如果成员…...

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...