最全最简单理解迭代器

1. 迭代器的基础概念(iterator)

1.1 本质

        迭代器能够用来遍历容器的对象,与能够遍历数组的指针类似,是广义指针。

1.2 作用:

  • 能够让迭代器与算法不干扰的相互发展,最后又能无间隙的粘合起来。
  • 重载了*,++,==,!=,=运算符。用以操作复杂的数据结构。
  • 容器提供迭代器,算法使用迭代器。

1.3 产生由来

        迭代器的设计来源于软件工程中对数据集合遍历的需求。在早期的编程中,特别是那些没有内建数据结构遍历功能的语言,程序员需要编写复杂的循环结构来访问容器中的元素,比如数组、列表或树。这种做法既繁琐又容易出错,特别对于动态大小的数据结构,如果直接操作下标会随着添加或删除元素而变得复杂。

        为了简化这个过程并提供一种统一的访问机制,迭代器的概念应运而生。迭代器是一个独立的对象,它按照一定的规则(通常是顺序)逐个返回容器中的元素,开发者无需关心数据的具体存储方式。通过迭代器,可以方便地对各种数据结构进行遍历,提高了代码的灵活性和可维护性。迭代器模式也是设计模式的一种,体现了“隔离关注点”的原则。

        简言之,用迭代器遍历比用下标访问访问(就是用[ ]来访问)更通用。因为大多数容器并不是数组实现的,不能用[ ]来访问容器元素,因此c++就需要迭代器这种更加普遍,更加通用的工具来提高效率。

1.4 类型分类

        迭代器属于一种数据类型,就像是c语言的内置类型有整型(整型又分为整型int,短整型short,长整型long),浮点型(浮点型又分为浮点float,双精度浮点型double,长精度浮点型long double),类似的,他也有好几种类型——五种:输入迭代器,输出迭代器,前向迭代器,双向迭代器,随机迭代器。

        他支持++,--,>,<,>=,<=,==,!= 这几种运算,注意这些运算只是针对迭代器的位置关系(如:两个迭代器相减,得到的是两个迭代器之间的距离),但这些类型的性质有所不同。

以上是他们所支持的运算,但是>,<,>=,<=要自己自定义迭代器去实现。

1.5 迭代器的操作(上面的运算)

        与容器相同,迭代器有公共的接口(接口(Interface)是一种抽象类型,用于定义一组方法或属性,但不提供这些方法的具体实现。它是一个合约,规定了类必须实现的方法,以确保不同类之间能够以统一的方式进行交互。):

        如果一个迭代器执行某个操作,那么想要实现相同操作的迭代器对于这个操作的实现方式都相同。举个栗子来帮助你的理解吧,标准容器类型上的所有迭代器都允许我们访问容器中的元素(并得到他具体的值),而所有迭代器都是通过解引用运算符来实现这个操作的。类似的,标准库容器的所有迭代器都定义了递增运算符,从当前元素移动到下一个元素。如下有具体的介绍:

                表二的运算符只能应用于string,vector,deque和array的迭代器,我们不能把他们用于任何其它类型的迭代器.

1.6 迭代器的范围

        一个迭代器的范围(iterator range)由一对迭代器表示,两个迭代器分别指向同一个容器中的第一个元素以及最后一个元素的后面一个位置。这两个迭代器通常被称为begin和end,但也有的地方叫做first和last——有误导(last通常表示最后一个元素,但这里不是指的最后一个元素,有的时候会因为这个被误导,大家注意一下ÿ

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

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

相关文章

MTSET可溶于DMSO、DMF、THF等有机溶剂,并在水中有轻微的溶解性,91774-25-3

一、基本信息 中文名称&#xff1a;[2-(三甲基铵)乙基]甲硫基磺酸溴&#xff1b;MTSET巯基反应染料 英文名称&#xff1a;MTSET&#xff1b;[2-(Trimethylammonium)ethyl]methanethiosulfonate Bromide CAS号&#xff1a;91774-25-3 分子式&#xff1a;C6H16BrNO2S2 分子量…

CC1链学习记录

&#x1f338; 前言 上篇文章学习记录了URLDNS链&#xff0c;接下来学习一下Common-Colections利用链。 &#x1f338; 相关介绍 Common-Colections是Apache软件基金会的项目&#xff0c;对Java标准的Collections API提供了很好的补充&#xff0c;在其基础上对常用的数据结构…

Android 配置默认输入法

1.背景 最近有个国内的项目&#xff0c;预制了输入法apk&#xff0c;但是无法调出软键盘。原因是没有配置默认输入法&#xff0c;本文主要记录下如何配置默认输入法。 2.代码设置 设置默认输入法需要配置Settings.Secure.ENABLED_INPUT_METHODS和Settings.Secure.DEFAULT_IN…

【juc】ConcurrentHashMap

目录 1.说明2.基本结构3.线程安全机制3.1 分段锁3.2 CAS操作3.3 volatile关键字 4.扩容机制5.其他特性 1.说明 1.ConcurrentHashMap是Java中的一个线程安全的哈希表实现。 2.ConcurrentHashMap的底层结构主要由数组、链表和红黑树组成。 3.在JDK 1.8及之后的版本中&#xff0c;…

数据湖与数据仓库的区别

数据湖与数据仓库是两种不同的数据存储和管理方式&#xff0c;它们在多个方面存在显著的区别。以下是对数据湖与数据仓库区别的详细阐述&#xff1a; 一、数据存储方式 数据仓库 通常采用预定义的模式和结构来存储数据。数据在存储前通常经过清洗、转换和整合等处理&#xff0…

数据结构PTA

20&#xff1a;C 22&#xff1a;B 27&#xff1a;D 填空 4-2&#xff1a;19 4-4&#xff1a;66 4-5&#xff1a;8 5-x&#xff1a;不加分号 ⬇&#xff1a;top p->next 编程 单链表 每个节点除了存放数据元素外&#xff0c;还要存储指向下一节点的指针…

有哪些机器学习实战?——AI实战指南

机器学习已经从理论走向实际应用&#xff0c;各行业的公司和个人都希望通过机器学习来解决现实问题&#xff0c;提升效率。那么&#xff0c;有哪些值得学习和实践的机器学习项目呢&#xff1f;以下将介绍几类热门的机器学习实战项目&#xff0c;涵盖了推荐系统、图像识别、自然…

go语言中的通道(channel)详解

在 Go 语言中&#xff0c;通道&#xff08;channel&#xff09; 是一种用于在 goroutine&#xff08;协程&#xff09;之间传递数据的管道。通道具有类型安全性&#xff0c;即它只能传递一种指定类型的数据。通道是 Go 并发编程的重要特性&#xff0c;能够让多个 goroutine 之间…

Flutter-Padding组件

1. 说明 在html中常见的布局标签都有padding属性&#xff0c;但是Flutter中很多Widget是没有padding属性。这个时候 我们可以用Padding组件处理容器与子元素之间的间距 2. 属性 padding&#xff1a;padding值, EdgeInsetss设置填充的值 child&#xff1a;子组件 3. …

多叉树笔记

1 多叉树定义 多叉树是一种树形结构&#xff0c;它有一个特定的节点被称为“根”节点&#xff0c;而每个节点&#xff08;除了根节点&#xff09;恰好有一个前驱节点&#xff08;父节点&#xff09;。在有根多叉树中&#xff0c;每个节点可以拥有任意数量的后继节点&#xff0…

框架学习04-Spring 事务

1. 事务的基本概念 定义&#xff1a;事务是一组数据库操作的集合&#xff0c;这些操作要么全部成功执行&#xff0c;要么全部不执行。它是为了保证数据的一致性和完整性。例如&#xff0c;在一个银行转账系统中&#xff0c;从一个账户扣款和向另一个账户收款这两个操作应该作为…

【学术会议介绍,SPIE 出版】第四届计算机图形学、人工智能与数据处理国际学术会议 (ICCAID 2024,12月13-15日)

第四届计算机图形学、人工智能与数据处理国际学术会议 2024 4th International Conference on Computer Graphics, Artificial Intelligence and Data Processing (ICCAID 2024) 重要信息 大会官网&#xff1a;www.iccaid.net 大会时间&#xff1a;2024年12月13-15日 大会地…

2-UML概念模型测试

1. (单选题, 1.0 分) UML中的关系不包括&#xff08;&#xff09;。 A. 抽象B. 实现C. 依赖D. 关联 我的答案:A正确答案: A 知识点&#xff1a; UML的构成 1.0分 2. (单选题, 1.0 分) 下列事物不属于UML结构事物的是&#xff08;&#xff09;。 A. 组件B. 类C. 节点D. 状…

【go从零单排】Command-Line Flags、Command-Line Subcommands命令行和子命令

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 在 Go 语言中&#xff0c;命令行标志&#xff08;Command-Line Flags&#xff09…

WEB攻防-通用漏洞SQL读写注入MYSQLMSSQLPostgraSQL

知识点&#xff1a; 1、SQL注入-MYSQL数据库&#xff1b; 2、SQL注入-MSSQL数据库&#xff1b; 3、SQL注入-PostgreSQL数据库&#xff1b; 首先要找到注入点 详细点&#xff1a; Access无高权限注入点-只能猜解&#xff0c;还是暴力猜解 MYSQL&#xff0c;PostgreSQL&am…

自定义springCloudLoadbalancer简述

概述 目前后端用的基本都是springCloud体系&#xff1b; 平时在dev环境开发时&#xff0c;会把自己的本地服务也注册上去&#xff0c;但是这样的话&#xff0c;在客户端调用时请求可能会打到自己本地&#xff0c;对客户端测试不太友好. 思路大致就是前端在请求头传入指定ip&a…

腾讯云11.11云服务器活动--上云拼团GO

目录 云服务器活动介绍&#xff1a; 轻量服务器 上GO拼团领券 云服务器购买 HAI现金券 学生专享GPU 活动总结 云服务器活动介绍&#xff1a; 双十一临近,这是您一年中最期待的购物狂欢时刻。作为国内领先的云计算服务商,腾讯云诚挚为您呈献前所未有的优惠福利,助您在这…

防脱生发最有效的产品,测评总结早看少踩雷

别人脱单、脱贫你脱发&#xff0c;就问你心酸不心酸&#xff1f;探索防脱之路确实不易&#xff0c;到底怎么才能有效防脱养发呢&#xff0c;很有必要分享一下我多年的防脱心得&#xff0c;这几款一直在用的防脱育发好物&#xff0c;秃头朋友们可以看看~ **露卡菲娅防脱精华液**…

c++:string(一)

文章目录 一string类1C语言中的字符串2C中的string二遍历1[ ]2迭代器3const迭代器4范围for5auto6总结三String的尾插1size和length2max_size,capacity和clear3访问接口4尾插字符和字符串5 append的重载三string的扩容问题&#xff08;1&#xff09;怎么扩容&#xff08;2&#…

【2048】我的创作纪念日

机缘 2048天&#xff0c;不知不觉来csdn博客已经有2048天了&#xff0c;其实用csdn平台很久了&#xff0c;实际上写博客还是从2019年开始。 还记得最初成为创作者初心是什么吗&#xff1f; 最开始&#xff0c;主要是用来做笔记。平时工作中、学习中遇到的技术相关问题都会在cs…