迭代器类别

简介: 迭代器类别 输入迭代器 输入迭代器:可以读取序列中的元素。一个输入迭代器必须支持 用于比较两个迭代器的相等和不相等运算符(==、!=) 用于推进迭代器的前置和后置递增运算(++) 用于读取元素的解引用运算符(*);解引用只会出现在赋值运算符的右侧 箭头运算符(->),等价于(*it).member,即,解引用迭代器,并提取对象的成员 输入迭代器只用于顺序访问。

迭代器类别

输入迭代器

输入迭代器:可以读取序列中的元素。一个输入迭代器必须支持

  • 用于比较两个迭代器的相等和不相等运算符(==、!=)
  • 用于推进迭代器的前置和后置递增运算(++)
  • 用于读取元素的解引用运算符(*);解引用只会出现在赋值运算符的右侧
  • 箭头运算符(->),等价于(*it).member,即,解引用迭代器,并提取对象的成员

输入迭代器只用于顺序访问。对于一个输入迭代器,*it++保证是有效的,但递增它可能导致所有其他指向流的迭代器失效。其结果就是,不能保证输入迭代器的状态可以保存下来并用来访问元素。因此,输入迭代器只能用于单遍扫描算法。算法find和accumulate要求输入迭代器;而istream_iterator是一种输入迭代器。

输出迭代器

输出迭代器:可以看做输入迭代器功能上的补集——只写而不读元素。输出迭代器必须支持

  • 用于推进迭代器的前置和后置递增运算(++)
  • 解引用运算符(*),只能出现在赋值运算符的左侧(向一个已经解引用的输出迭代器赋值,就是将值写入它所指向的元素)

我们只能向一个输出迭代器赋值一次。类似输入迭代器,输出迭代器只能用于单遍扫描算法。用作目的位置的迭代器通常都是输出迭代器。例如,copy函数的第三个参数就是输出迭代器。ostream_iterator类型也是输出迭代器。

前向迭代器

前向迭代器:可以读元素。这类迭代器只能在序列中沿一个方向移动。前向迭代器支持所有输入和输出迭代器的操作,而且可以多次读写同一个元素。因此,我们可以保存前向迭代器的状态,使用前向迭代器的算法可以对序列进行多遍扫描。算法replace要求前向迭代器,forward_list上的迭代器就是前向迭代器。

双向迭代器

双向迭代器:可以正向/反向读写序列中的元素。除了支持所有前向迭代器的操作之外,双向迭代器还支持前置和后置递减运算符(--)。算法reverse要求双向迭代器,除了forward_list之外,其他标准库都提供符合双向迭代器要求的迭代器。

随机迭代器

随机访问迭代器:提供在常量时间内访问序列中的任意元素的能力。此类迭代器支持双向迭代器的所有功能,此外还支持如下的操作:

  • 用于比较两个迭代器相对位置的关系运算符(<、<=、>和>=)
  • 迭代器和一个整数值的加减运算(+、+=、-和-=),计算结果是迭代器在序列中前进(或后退)给定整数个元素后的位置
  • 用于两个迭代器上的减法运算符(-)得到两个迭代器的距离
  • 下标运算符(iter[n],与*(iter[n])等价

算法sort要求随机访问迭代器,array、deque、string和vector的迭代器都是随机访问迭代器,用于访问内置数组元素的指针也是。

相关文章
|
Linux
linux系统中利用QT实现音乐播放器的功能
linux系统中利用QT实现音乐播放器的功能
427 0
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
498 0
|
10月前
|
数据采集 人工智能 自然语言处理
基于OpenLake的大模型训练及RAG应用
本文介绍了OpenLake在大数据与AI融合方面的应用,重点探讨了如何通过OpenLake打通数据到应用的各个环节。首先,阐述了自然语言处理(NLP)从非结构化数据向结构化数据的转变,并强调了高质量数据对AI模型训练的重要性。接着,详细介绍了OpenLake+PAI平台如何实现大数据与AI的一体化开发,包括数据预处理、多模态数据管理、智能标注及优化推理效率等。最后,结合OpenSearch,展示了RAG(检索增强生成)技术在企业级应用中的挑战与解决方案,如构建稳定高效的检索系统,确保数据安全与准确性。整体方案旨在提升AI模型的效果和安全性,推动各行业的智能化转型。
|
11月前
|
JSON JavaScript 前端开发
|
前端开发 Java Maven
Maven 快照(SNAPSHOT)
**Maven SNAPSHOT简化多团队协作:**当开发中的data-service频繁更新时,使用1.0-SNAPSHOT标识,每次构建Maven自动检查远程仓库的最新快照,避免了手动通知和更新pom.xml的繁琐步骤,促进模块间的无缝集成。
|
移动开发 小程序 JavaScript
uView Input 输入框
uView Input 输入框
265 0
|
存储 消息中间件 缓存
并发编程 - 通过 Disruptor 来实现无锁无阻塞的并发编程
并发编程 - 通过 Disruptor 来实现无锁无阻塞的并发编程
833 1
|
SQL XML Java
mybatis元素类型为 "resultMap" 的内容必须匹配 "(constructor?,id *,result*,association报错解决
mybatis元素类型为 "resultMap" 的内容必须匹配 "(constructor?,id *,result*,association报错解决
643 0
|
Linux
linux下实现日志切割的两种方法 logrotate
linux下实现日志切割的两种方法 logrotate
714 0
|
JavaScript Linux 开发工具
通过nvm可以在电脑上安装多个版本的nodejs
通常我们只需要下载window或者mac的安装包到本地再进行安装即可。
480 0