STL 2迭代器

news2025/6/10 10:45:56

文章目录

    • 1.迭代器
    • 2.输入迭代器
    • 3.输出迭代器
      • 1.插入迭代器
    • 4.前向迭代器
    • 5.双向迭代器
    • 6.随机访问迭代器
    • 7.不同容器返回的迭代器类型
      • 1.输入 / 输出迭代器
      • 2.前向迭代器
      • 3.双向迭代器
      • 4.随机访问迭代器
      • 5.特殊迭代器适配器
      • 6.为什么 unordered_set 只提供前向迭代器?

1.迭代器

1.迭代器
1.抽象的指针:迭代器是一种行为类似指针的对象,提供对容器元素的间接访问。
2.统一接口:通过迭代器,算法可以操作任意容器(如 vector、list、map),无需关心容器的底层实现。

2 核心作用
1.遍历容器:替代直接操作容器内部结构,简化代码。
2.算法复用:STL 算法(如 std::sort、std::find)通过迭代器操作数据,不依赖具体容器。

2.输入迭代器

输入迭代器是迭代器分类中功能最弱的类型,其设计目标是单遍读取数据,具有以下特点:
std::istream_iterator

1.支持的操作:
1.自增操作(++it 或 it++):移动到下一个元素。
2.解引用(*it):读取当前元素的值(返回右值,不可修改)。
3.相等性比较(== 和 !=):判断两个迭代器是否指向同一位置。

2.关键限制
1.不可重复读取:同一元素只能通过迭代器读取一次,多次解引用行为未定义(类似输入流)。
2.不可写操作:不能通过 *it 修改元素值(解引用结果为右值)。
3.不支持反向移动:无法通过 – 回到前一个元素。

3.输出迭代器

输出迭代器是迭代器分类中用于单遍写入数据的接口,其设计目标是高效地将数据写入目标位置。它具有以下特点:
ostream_iterator
1.支持的操作
1.自增操作(++it 或 it++):移动到下一个写入位置。
2.解引用赋值(*it = value):将值写入当前位置。
3.注意:输出迭代器的解引用结果必须是可修改的左值(Lvalue)。

2.关键限制
1.不可读取:不支持通过 *it 读取元素值,仅用于写入。
2.单遍写入:同一位置只能写入一次,多次写入行为未定义。
3.不支持反向移动:无法通过 – 回到前一个位置。

1.插入迭代器

插入迭代器(Insert Iterator)是输出迭代器(Output Iterator)的具体实现,二者的关系可概括为:
1.插入迭代器继承了输出迭代器的接口,并扩展了容器插入元素的能力。

2.常见插入迭代器
1.尾插迭代器(std::back_inserter)
适配容器:需支持 push_back()(如 vector、deque、list)。
2.头插迭代器(std::front_inserter)
适配容器:需支持 push_front()(如 list、deque)。
3.任意位置插入迭代器(std::inserter)
适配容器:需支持 insert(pos, value)(如所有标准容器)。

4.前向迭代器

前向迭代器是 STL 迭代器分类中的一种,它在输入 / 输出迭代器的基础上支持多次读写,并具有以下特点:
forward_list、unordered_set

1.支持的操作
1.输入迭代器的全部操作:自增(++)、解引用读取(*it)、相等比较(==/!=)。
2.输出迭代器的全部操作:解引用写入(*it = value)。
3.多次遍历:可保存迭代器状态并重复使用(如多次解引用同一位置)。

2.关键限制
1.单向移动:仅支持 ++ 操作,无法通过 – 回到前一个位置。
2.不支持随机访问:不能直接跳跃到任意位置(如 it + 5)。
前向迭代器适用于单向链表、哈希表等只能单向遍历的数据结构,
单向链表(std::forward_list)

5.双向迭代器

双向迭代器是 STL 迭代器分类中的一种,它在前向迭代器的基础上增加了反向移动能力,具有以下特点:
list、set、map
1.支持的操作
1.前向迭代器的全部操作:自增(++)、解引用读写(*it、*it = value)、多次遍历。
2.反向移动:支持递减操作(–it 或 it–),可向前遍历。

2.关键限制
1.不支持随机访问:无法直接跳跃到任意位置(如 it + 5),只能逐个移动。
2.必须成对使用 ++ 和 --:例如,若从 begin() 开始,必须通过 – 回到 begin() 之前的位置(如 rend())。

6.随机访问迭代器

随机访问迭代器是 STL 迭代器分类中功能最强的类型,它在双向迭代器的基础上增加了随机访问能力,具有以下特点:
vector、deque、原生数组

1.支持的操作
1.双向迭代器的全部操作:自增(++)、自减(–)、解引用读写(*it、*it = value)。
2.随机位置跳转:支持 +=、-=、+、- 操作(如 it += 5 直接跳到第 5 个位置)。
3.位置比较:支持 <、>、<=、>= 比较迭代器位置。
4.下标访问:支持 it[n] 语法(等价于 *(it + n))。

2.时间复杂度:所有操作均为 O (1)。

7.不同容器返回的迭代器类型

1.输入 / 输出迭代器

这类迭代器通常由适配器或流对象生成,而非直接来自容器:

2.前向迭代器

std::forward_list
std::unordered_set
std::unordered_map

3.双向迭代器

std::list
std::set
std::map
std::multiset
std::multimap

4.随机访问迭代器

std::vector
std::deque
std::array

5.特殊迭代器适配器

由算法或适配器生成的迭代器,
std::reverse_iterator
std::back_inserter
std::front_inserter
std::inserter

6.为什么 unordered_set 只提供前向迭代器?

哈希表的元素存储顺序不确定,且遍历时通常按桶的顺序访问,因此不支持双向移动。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2406522.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智警杯备赛--excel模块

数据透视与图表制作 创建步骤 创建 1.在Excel的插入或者数据标签页下找到数据透视表的按钮 2.将数据放进“请选择单元格区域“中&#xff0c;点击确定 这是最终结果&#xff0c;但是由于环境启不了&#xff0c;这里用的是自己的excel&#xff0c;真实的环境中的excel根据实训…

【多线程初阶】单例模式 指令重排序问题

文章目录 1.单例模式1)饿汉模式2)懒汉模式①.单线程版本②.多线程版本 2.分析单例模式里的线程安全问题1)饿汉模式2)懒汉模式懒汉模式是如何出现线程安全问题的 3.解决问题进一步优化加锁导致的执行效率优化预防内存可见性问题 4.解决指令重排序问题 1.单例模式 单例模式确保某…

基于Python的气象数据分析及可视化研究

目录 一.&#x1f981;前言二.&#x1f981;开源代码与组件使用情况说明三.&#x1f981;核心功能1. ✅算法设计2. ✅PyEcharts库3. ✅Flask框架4. ✅爬虫5. ✅部署项目 四.&#x1f981;演示效果1. 管理员模块1.1 用户管理 2. 用户模块2.1 登录系统2.2 查看实时数据2.3 查看天…

Pandas 可视化集成:数据科学家的高效绘图指南

为什么选择 Pandas 进行数据可视化&#xff1f; 在数据科学和分析领域&#xff0c;可视化是理解数据、发现模式和传达见解的关键步骤。Python 生态系统提供了多种可视化工具&#xff0c;如 Matplotlib、Seaborn、Plotly 等&#xff0c;但 Pandas 内置的可视化功能因其与数据结…

新版NANO下载烧录过程

一、序言 搭建 Jetson 系列产品烧录系统的环境需要在电脑主机上安装 Ubuntu 系统。此处使用 18.04 LTS。 二、环境搭建 1、安装库 $ sudo apt-get install qemu-user-static$ sudo apt-get install python 搭建环境的过程需要这个应用库来将某些 NVIDIA 软件组件安装到 Je…

Axure Rp 11 安装、汉化、授权

Axure Rp 11 安装、汉化、授权 1、前言2、汉化2.1、汉化文件下载2.2、windows汉化流程2.3、 macOs汉化流程 3、授权 1、前言 Axure Rp 11官方下载链接&#xff1a;https://www.axure.com/downloadthanks 2、汉化 2.1、汉化文件下载 链接: https://pan.baidu.com/s/18Clf…

中科院1区顶刊|IF14+:多组学MR联合单细胞时空分析,锁定心血管代谢疾病的免疫治疗新靶点

中科院1区顶刊|IF14&#xff1a;多组学MR联合单细胞时空分析&#xff0c;锁定心血管代谢疾病的免疫治疗新靶点 当下&#xff0c;免疫与代谢性疾病的关联研究已成为生命科学领域的前沿热点。随着研究的深入&#xff0c;我们愈发清晰地认识到免疫系统与代谢系统之间存在着极为复…

作为点的对象CenterNet论文阅读

摘要 检测器将图像中的物体表示为轴对齐的边界框。大多数成功的目标检测方法都会枚举几乎完整的潜在目标位置列表&#xff0c;并对每一个位置进行分类。这种做法既浪费又低效&#xff0c;并且需要额外的后处理。在本文中&#xff0c;我们采取了不同的方法。我们将物体建模为单…

使用ch340继电器完成随机断电测试

前言 如图所示是市面上常见的OTA压测继电器&#xff0c;通过ch340串口模块完成对继电器的分路控制&#xff0c;这里我编写了一个脚本方便对4路继电器的控制&#xff0c;可以设置开启时间&#xff0c;关闭时间&#xff0c;复位等功能 软件界面 在设备管理器查看串口号后&…

基于谷歌ADK的 智能产品推荐系统(2): 模块功能详解

在我的上一篇博客&#xff1a;基于谷歌ADK的 智能产品推荐系统(1): 功能简介-CSDN博客 中我们介绍了个性化购物 Agent 项目&#xff0c;该项目展示了一个强大的框架&#xff0c;旨在模拟和实现在线购物环境中的智能导购。它不仅仅是一个简单的聊天机器人&#xff0c;更是一个集…

VSCode 没有添加Windows右键菜单

关键字&#xff1a;VSCode&#xff1b;Windows右键菜单&#xff1b;注册表。 文章目录 前言一、工程环境二、配置流程1.右键文件打开2.右键文件夹打开3.右键空白处打开文件夹 三、测试总结 前言 安装 VSCode 时没有注意&#xff0c;实际使用的时候发现 VSCode 在 Windows 菜单栏…

vxe-table vue 表格复选框多选数据,实现快捷键 Shift 批量选择功能

vxe-table vue 表格复选框多选数据&#xff0c;实现快捷键 Shift 批量选择功能 查看官网&#xff1a;https://vxetable.cn 效果 代码 通过 checkbox-config.isShift 启用批量选中,启用后按住快捷键和鼠标批量选取 <template><div><vxe-grid v-bind"gri…

Android Framework预装traceroute执行文件到system/bin下

文章目录 Android SDK中寻找traceroute代码内置traceroute到SDK中traceroute参数说明-I 参数&#xff08;使用 ICMP Echo 请求&#xff09;-T 参数&#xff08;使用 TCP SYN 包&#xff09; 相关文章 Android SDK中寻找traceroute代码 设备使用的是Android 11&#xff0c;在/s…

生信服务器 | 做生信为什么推荐使用Linux服务器?

原文链接&#xff1a;生信服务器 | 做生信为什么推荐使用Linux服务器&#xff1f; 一、 做生信为什么推荐使用服务器&#xff1f; 大家好&#xff0c;我是小杜。在做生信分析的同学&#xff0c;或是将接触学习生信分析的同学&#xff0c;<font style"color:rgb(53, 1…

react-pdf(pdfjs-dist)如何兼容老浏览器(chrome 49)

之前都是使用react-pdf来渲染pdf文件&#xff0c;这次有个需求是要兼容xp环境&#xff0c;xp上chrome最高支持到49&#xff0c;虽然说iframe或者embed都可以实现预览pdf&#xff0c;但为了后续的定制化需求&#xff0c;还是需要使用js库来渲染。 chrome 49测试环境 能用的测试…

RKNN开发环境搭建2-RKNN Model Zoo 环境搭建

目录 1.简介2.环境搭建2.1 启动 docker 环境2.2 安装依赖工具2.3 下载 RKNN Model Zoo2.4 RKNN模型转化2.5编译C++1.简介 RKNN Model Zoo基于 RKNPU SDK 工具链开发, 提供了目前主流算法的部署例程. 例程包含导出RKNN模型, 使用 Python API, CAPI 推理 RKNN 模型的流程.   本…

20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题

20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题 2025/6/9 20:54 缘起&#xff0c;为了跨网段推流&#xff0c;千辛万苦配置好了网络参数。 但是命令iptables -t filter -F tetherctrl_FORWARD可以在调试串口/DEBUG口正确执行。…

21-Oracle 23 ai-Automatic SQL Plan Management(SPM)

小伙伴们&#xff0c;有没有迁移数据库完毕后或是突然某一天在同一个实例上同样的SQL&#xff0c; 性能不一样了、业务反馈卡顿、业务超时等各种匪夷所思的现状。 于是SPM定位开始&#xff0c;OCM考试中SPM必考。 其他的AWR、ASH、SQLHC、SQLT、SQL profile等换作下一个话题…

性能优化中,多面体模型基本原理

1&#xff09;多面体编译技术是一种基于多面体模型的程序分析和优化技术&#xff0c;它将程序 中的语句实例、访问关系、依赖关系和调度等信息映射到多维空间中的几何对 象&#xff0c;通过对这些几何对象进行几何操作和线性代数计算来进行程序的分析和优 化。 其中&#xff0…

【Zephyr 系列 16】构建 BLE + LoRa 协同通信系统:网关转发与混合调度实战

🧠关键词:Zephyr、BLE、LoRa、混合通信、事件驱动、网关中继、低功耗调度 📌面向读者:希望将 BLE 和 LoRa 结合应用于资产追踪、环境监测、远程数据采集等场景的开发者 📊篇幅预计:5300+ 字 🧭 背景与需求 在许多 IoT 项目中,单一通信方式往往难以兼顾近场数据采集…