C++ STL概念之 迭代器

什么是迭代器

迭代器(Iterator)是一个在容器中访问元素的对象,提供了一种方法来顺序访问容器中的元素,而无需暴露容器的底层表示。

或者说 行为像指针一样的类型。可能是指针也可能是被类封装的指针,不关注容器底层细节访问容器。

迭代器在STL的地位

迭代器的价值是什么

是STL其他五个组件的粘合剂

迭代器使得编写一些通用算法成为可能,这些算法可以作用于不同类型的容器而无需改变代码。

什么是迭代器失效

迭代器失效,顾名思义,就是迭代器无效的情况。如果一个迭代器无法正确引用一个元素(比如元素已经被删除)或者迭代器的行为无法预知(如在迭代的过程中容器发生改变),我们就说这个迭代器已经失效。

迭代器失效的情况和主要原因:

  1. 容器元素被删除。如果一个元素被删除,指向该元素的迭代器,引用和指针都会失效。
  2. 非序列容器(如 map, set)的元素被修改。对于非序列容器,元素的值(key)是关键的部分,改变元素的值可能会改变元素在容器中的位置,这会使得指向该元素的迭代器失效。

  3. 容器的内存空间被重新分配。对于某些需要连续内存空间的容器(如 vector, deque, string),如果在容器中添加元素使得容器容量不足而进行重新分配,原来的迭代器就会失效。而对于 list 和 forward_list 这样的链表结构,添加或删除元素只会影响到指向这个元素的迭代器,其他的迭代器不会失效。

=========================================================================

反向迭代器的原理

反向迭代器(Reverse Iterators)是一种特殊的迭代器,它将内部容器的迭代顺序反向,使得原本从前往后的顺序变为从后往前。

原理:

反向迭代器的工作原理是通过对原始迭代器进行包装,改变其 ++--* 等操作的语义。我们可以用 rbegin() 获取一个反向迭代器,这个迭代器指向容器的最后一个元素,然后通过 ++ 运算符可以使其向前移动,而不是向后。

迭代器分类

单向++  (Forward iterators)

forword_list 和unordered_map / unordered_set 都是单向迭代器

双向 ++ / -- (Bidirectional iterators)

map / set 和list 都是双向迭代器

随机迭代器 ++ / -- / + / - (Random-access iterators)

string vector deque 都是随机迭代器

迭代器分类的目的是为了提供不同层次的接口访问容器中的元素,这样设计使得算法可以基于迭代器的类别进行适配,实现更高的灵活性和通用性。例如,一些算法仅需要输入迭代器,而更复杂的算法可能需要随机访问迭代器。按照迭代器的分类实现算法,可以保证算法可以在满足要求的最宽泛范围的容器上工作。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索软件测试中的创新测试方法:测试左移

软件测试中的测试左移方法 在当今竞争激烈的市场中,满足客户的期望和需求是所有公司在竞争中成为市场领导者的关键。这就是为什么越来越多的公司现在转向测试左移,并将其应用于产品开发过程。 在本文中,我们将从初学者的角度来介绍测试左移…

python中cv2,等等如何修改为中文字体显示,这里以人脸表情识别中文标签为例

中文字体显示 首先下载字体包部署字体包代码实现部分 想必大家在使用python过程中都会遇到,想要显示中文的时候,但是py基本上都是英文字体,下面我将给大家提供一个比较好的解决方案: 首先下载字体包 方法: 我使用的是…

【教学类-55-04】20240515图层顺序挑战(四格长条纸加黑色边框、4*4、7张,不重复5400张,16坐标点颜色哈希值去重、保留7色)

背景需求: 前文实现了7张色彩纸条加上黑色边框的需求。 【教学类-55-02】20240512图层顺序挑战(四格长条纸加黑色边框、4*4、7张 、43200张去掉非7色有23040张,哈希算法快速去重剩余1221张)-CSDN博客文章浏览阅读1k次&#xff0…

人工智能领域向量化技术加速多模态大模型训练与应用

目录 前言1、TextIn文档解析技术1.1、文档解析技术1.2、目前存在的问题1.2.1、不规则的文档信息示例 1.3、合合信息的文档解析1.3.1、合合信息的TextIn文档解析技术架构1.3.2、版面分析关键技术 Layout-engine1.3.3、文档树提取关键技术 Catalog-engine1.3.4、双栏1.3.5、非对称…

页面布局(H5基础)(上)

元素的显示模式 元素的显示模式 块级元素 页面中独占一行,不会与任何元素公用一行,从上到下排列 宽度默认是元素的高度,高度默认内容撑开 可以通过css设置宽高 行内元素 在页面中不独占一行,一行中不能容纳的行内元素&#x…

Python 全栈体系【四阶】(四十四)

第五章 深度学习 九、图像分割 3. 常用模型 3.4 DeepLab 系列 3.4.3 DeepLab v3(2017) 在DeepLab v3中,主要进行了以下改进: 使用更深的网络结构,以及串联不同膨胀率的空洞卷积,来获取更多的上下文信…

Java项目:基于ssm框架实现的房屋租售网站管理系统(房屋租赁和房屋出售一体)(B/S架构+源码+数据库+毕业论文+开题+任务书)

一、项目简介 本项目是一套基于ssm框架实现的房屋租售网站管理系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、…

品鉴中的艺术审美:如何将红酒品鉴提升为一种艺术体验

品鉴云仓酒庄雷盛红酒不仅仅是对酒本身的体验,更是一种艺术和审美的过程。将品鉴提升为一种艺术体验,需要我们用更细腻的感官、情感和认知去感受葡萄酒的魅力。 首先,我们要意识到品鉴葡萄酒是一种多感官的体验。除了基本的视觉、嗅觉和味觉…

python怎么安装matplotlib

1、登陆官方网址“https://pypi.org/project/matplotlib/#description”,下载安装包。 2、选择合适的安装包,下载下来。 3、将安装包放置到python交互命令窗口的当前目录下。 4、打开windows的命令行窗口,通过"pip install"这个命令…

CSRF 攻击实验:更改请求方式绕过验证

前言 CSRF(Cross-Site Request Forgery),也称为XSRF,是一种安全漏洞,攻击者通过欺骗用户在受信任网站上执行非自愿的操作,以实现未经授权的请求。 CSRF攻击利用了网站对用户提交的请求缺乏充分验证和防范…

【三家飞机制造商】

1.Boeing 波音 F-15战机 B-52轰炸机 阿帕奇攻击直升机 E-3 2 .Lockheed Martin 洛克希德马丁 F35 F22 F16 F117 C130 U2 3 Raytheon 雷神

uniapp 自定义uni.showToast,可以修改背景色,移动端(Andriod、ios)可用

如下样式 全局修改uni.showToast样式如下: .uni-toast {background: #FFFFFF !important;box-shadow: 0px 0px 10px 1px rgba(0,0,0,0.1) !important;border-radius: 10px 10px 10px 10px !important;color: #111111 !important; } 如上修改只在H5上生效&#xff…