0

0

C++的迭代器(iterator)有哪些种类和区别_C++STL迭代器分类与使用场景

穿越時空

穿越時空

发布时间:2025-10-27 12:48:01

|

620人浏览过

|

来源于php中文网

原创

C++ STL将迭代器分为五种类型:输入迭代器用于单向读取,输出迭代器用于单向写入,前向迭代器支持多次读写并单向遍历,双向迭代器可前后移动,随机访问迭代器具备数组式任意访问能力,适用于高效算法。

c++的迭代器(iterator)有哪些种类和区别_c++stl迭代器分类与使用场景

在C++的STL中,迭代器(iterator)是用于访问容器元素的通用机制,它类似于指针,可以遍历、读取或修改容器中的数据。根据功能强弱和操作能力的不同,STL将迭代器分为五种主要类型,每种适用于不同的容器和操作场景。

1. 输入迭代器(Input Iterator)

输入迭代器支持从容器中逐个读取元素,但只能单向移动且只能读一次。它的典型操作包括解引用(*)、递增(++)和比较(==, !=)。

这类迭代器常用于输入流操作,比如使用 std::istream_iterator 从标准输入读取数据。

  • 只读,不可写
  • 单向移动(只能 ++)
  • 不支持回退或随机访问
适用场景:一次性读取数据流,如文件输入、键盘输入。

2. 输出迭代器(Output Iterator)

输出迭代器允许向容器或输出流中写入数据,也是单向的,但只能写不能读。常见于算法输出目标,如 std::ostream_iterator 将数据输出到控制台或文件。

立即学习C++免费学习笔记(深入)”;

  • 只写,不可读
  • 支持递增操作(++)
  • 不能多次赋值同一位置(某些实现限制)
适用场景:将算法结果写入流或容器末尾,如 copy 算法的目标端。

3. 前向迭代器(Forward Iterator)

前向迭代器结合了输入和输出能力,可多次读写同一个元素,并支持单向遍历。它比前两种更强,可以在遍历时反复访问相同位置。

居然设计家
居然设计家

居然之家和阿里巴巴共同打造的家居家装AI设计平台

下载
  • 支持多次读写
  • 只能通过 ++ 向前移动
  • 可用于需要重复访问的算法
典型容器:std::forward_list、哈希表(unordered 系列)中的节点。

4. 双向迭代器(Bidirectional Iterator)

在前向迭代器基础上,增加了向前和向后双向移动的能力,即支持 ++ 和 -- 操作。这使得它可以灵活地前后遍历元素。

  • 支持前置/后置递增与递减
  • 适用于需要反向遍历的场景
  • 可构造 reverse_iterator
典型容器:std::list、std::set、std::map 等关联容器。

5. 随机访问迭代器(Random Access Iterator)

这是功能最强大的迭代器类型,支持像数组一样的任意位置访问。除了支持所有双向迭代器的操作外,还能进行指针算术运算。

  • 支持 +, - 整数偏移(it + n)
  • 支持下标操作(it[n])
  • 支持两个迭代器之间的距离计算(it1 - it2)
  • 支持比较大小(, =)
典型容器:std::vector、std::deque、std::array 以及原生指针(也属于此类)。

随机访问迭代器让许多高效算法成为可能,例如快速排序、二分查找等,这些都需要 O(1) 的跳跃式访问能力。

基本上就这些。选择合适的迭代器类型取决于你要使用的容器和算法需求。大多数标准算法会根据传入的迭代器类型启用最优实现,比如 std::sort 要求随机访问迭代器,而 std::find 只需输入迭代器即可工作。

相关专题

更多
sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

377

2023.09.04

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

73

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

23

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

36

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

31

2025.11.27

点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

180

2023.11.24

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

378

2023.08.14

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

315

2023.10.09

苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

10

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

ECMAScript6 / ES6---十天技能课堂
ECMAScript6 / ES6---十天技能课堂

共25课时 | 1.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号