C++ STL概念之 迭代器

news2024/11/15 23:20:26

什么是迭代器

迭代器(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.coloradmin.cn/o/1678363.html

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

相关文章

SWAT模型高阶应用暨SWAT模型无资料地区建模、不确定分析及气候、土地利用变化对水资源与面源污染影响分析

原文链接:SWAT模型高阶应用暨SWAT模型无资料地区建模、不确定分析及气候、土地利用变化对水资源与面源污染影响分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247604401&idx4&snd2d39846dce07bee765c820de1cf92f3&chksmfa821956cdf5904…

GM812条码模块的技术参数

扫码性能参数 *测试条件:环境温度23℃;环境照度300 LUX; **测试条件:测试距离(最小景深最大景深)/2; 环境温度23℃;环境照度300 LUX; *规格如有更改,恕不另…

嵌入式学习72-复习(字符设备驱动框架)

编辑 drivers/char/Kconfig 为了在make menuconfig是能够显示出我们写的驱动程序 make menuconfig 编辑 drivers/char/Makefile 才是真正把编写好的源文件加入到编译中去 make modules cp drivers/char/first_driver.ko ~/nfs/rootfs/

Kotlin扩展函数和运算符重载

扩展函数 fun String.lettersCount():Int{var count 0for(i in this){if(i.isLetter())count}return count } fun main(){val str:String "12we"println(str.lettersCount()) } 相当于直接将方法写在类里面。函数体内可以直接使用this而不用传参。 运算符重载 …

织梦dedecms企业网站模板安装教程

很多新手在拿到织梦模板后不知道如何安装,所以,云部落(Yunbuluo.Net)资源网专门整理了一份图文版织梦模板通用安装教程,希望对大家有所帮助。 第一步: 将域名解析绑定好之后,上传下载的模板至您的WEB根目录中&#xf…

品鉴中的食物搭配:如何创造美味的红酒与食物组合

品鉴云仓酒庄雷盛红酒时,食物搭配是一个不可忽视的环节。通过巧妙的搭配,红酒与食物可以相互衬托,呈现出更加美妙的风味。下面就让我们一起探讨如何创造美味的红酒与食物组合。 首先,了解红酒与食物的搭配原则是关键。一般来说&a…

React Native 开发心得分享

有一段时间没更新了,花了点时间研究了下 React Native(后续用 RN 简称),同时也用该技术作为我的毕设项目(一个校园社交应用,仿小红书),经过了这段时间的疯狂折腾,对 RN 生态有了一定的了解&…

国际生物多样性科普暨母亲节亲子活动在天河公园举行

引言:"人类是命运共同体,不论是战胜新冠疫情,还是加强生物多样性保护,实现全球可持续发展,唯有团结合作,才能有效应对全球性挑战。生态兴则文明兴。我们应该携手努力,共同推进人与自然和谐…

OpenHarmony标准设备应用开发实战(一)——HelloWorld

本文主要内容包括三个方面: 1. 应用编译环境准备; 2. Hello Openharmony 页面编写; 3. 安装应用到标准设备上面。下面就让我们从零开始学习 OpenHarmony 标准设备应用开发。 一、应用开发环境准备 1.1 下载 DevEco Studio 3.0 Beta2 版本 …

3SRB2516-ASEMI适配大功率充电桩3SRB2516

编辑:ll 3SRB2516-ASEMI适配大功率充电桩3SRB2516 型号:3SRB2516 品牌:ASEMI 封装:SGBJ-5 正向电流(Id):25A 反向耐压(VRRM):1600V 正向浪涌电流&…

海外静态IP:全球互联的稳定之选

在全球化的商业环境中,企业与个人对于网络的依赖日益加深,而一个稳定、可靠的海外静态IP成为了连接世界的关键。本文将从五个方面深入探讨海外静态IP的重要性、应用场景、技术优势、市场趋势以及选择时的考量因素。 一、海外静态IP的重要性 静态IP地址是…

耐克、肯德基、美宝莲…六大品牌的经典广告语是如何诞生的?

近期,创意翻译公司franklyfluent推出了一个名为“Hard to Make, Easy to Break”的创意户外活动,展示了创意和文字艺术在品牌翻译中的重要性。 “Hard to Make, Easy to Break”的活动于2024年5月份在英国正式发布。这些移动广告牌出现在伦敦的各个体育…

【算法学习】拓扑排序

文章目录 拓扑排序课程表 拓扑排序 算法原理: 1.先找出图中入度为0的点,将该点加入到队列中 2.队列不为空时,拿出队头元素加入到最终结果 3.再遍历该点的邻接阵,将连接该点的点的入度全部减减 4.判断减减的点是否为入度为0&#…

渗压计与水位计的区别:监测工具的关键用途解析

在土木工程和水利工程领域,渗压计和水位计是两种重要的监测工具。它们虽然在外观和一些基本功能上可能相似,但其实各有专长,适用于不同的监测需求。了解它们的区别对于正确选择和应用这些工具至关重要本文将探讨渗压计和水位计的主要区别&…

【挑战全网】最全高德地图充电桩接入指南,流量必火!

分享《一套免费开源充电桩物联网系统,是可以立马拿去商用的!》 一、和高德直接互联互通的优势: 1、高德官方直接互联互通,提供给合作商户独立发展自主权,不依赖任何第三方平台; 2、自己控制电站的上线、下线、修改电…

2024年开抖店都需要做哪些准备?这些条件缺一不可

大家好,我是电商花花。 作为目前国内最受欢迎的短视频电商平台,抖音将成为众多创业者的首选平台。 在往年我们都知道抖音小店市场很多,红利很大,利润大,不少人都通过抖音小店实现了脱贫,也有部分上班族获…

VC++6.0 常用的文件对话框和目录选择对话框

1,文件对话框 //1,弹出文件打开对话框CString strFileName "";char szFilter[] {"exe files(*.exe)|*.exe|All Files(*.*)|*.*|"};CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter,NULL);if(dlg.DoModal() …

三清互联:公司已形成“研发-创新-增收-研发”良性循环

三清互联自创立之初便以电力物联网感知层终端及成套设备的研发、设计、生产和销售为核心,致力于为电力行业提供前沿的技术解决方案。多年来,公司主营业务、主要产品及经营模式均保持稳定,不断在电力物联网感知层领域深化探索与创新。 初创期的…

品鉴中的礼仪习俗:如何遵循正确的红酒品鉴礼仪

在品鉴云仓酒庄雷盛红酒时,遵循正确的礼仪习俗不仅能展现个人的修养,还能更好地领略葡萄酒的风味。下面我们将探讨红酒品鉴中的礼仪习俗。 首先,当我们拿起酒杯时,应该注意不要晃动酒杯,以免扰动其中的酒液。同时&…

运营商二次放号查询接口如何对接

运营商二次放号查询接口又叫手机二次放号检测接口,指的是输入手机号和日期,查看在该日期之前是不是二次放号。那么运营商二次放号查询接口如何对接呢? 这边我找到了一家叫数脉API的公司,他们刚好有这个接口,首先注册账…