扫恢怯
2025-10-1 19:05:25
迭代器(Iterator)是连接容器与算法的 “桥梁”,它提供了一种统一的方式访问容器中的元素,而无需暴露容器的内部实现。
不同容器的底层实现差异很大(如 vector 是动态数组,list 是双向链表),但迭代器屏蔽了这些差异,让算法(如 sort、for_each)可以用相同的方式处理任何容器。
算法只需依赖迭代器提供的接口,无需关心容器的具体类型,实现了 “泛型编程” 的核心思想。
一、迭代器分类
迭代器类型支持的操作(核心)对应容器示例输入迭代器(Input Iterator)只读访问(*it)、单向递增(++it)、比较相等(==/!=)istream_iterator(输入流迭代器)输出迭代器(Output Iterator)只写访问(*it = value)、单向递增(++it)ostream_iterator(输出流迭代器)前向迭代器(Forward Iterator)读写访问、单向递增(++it)、可重复遍历unordered_map、unordered_set双向迭代器(Bidirectional Iterator)读写访问、双向移动(++it/--it)、可双向遍历list、map、set随机访问迭代器(Random Access Iterator)读写访问、随机访问(it + n/it - n、it[n])、比较大小()vector、deque、array
- 输入 / 输出迭代器:功能最弱,仅支持单方向遍历和基本读写(输入只读,输出只写),适用于流操作。
- 前向迭代器:支持重复遍历同一序列(可多次递增),但只能向前移动,适合单向链表类容器。
- 双向迭代器:在向前迭代的基础上支持向后移动(--it),适合双向链表、平衡树(如红黑树)类容器。
- 随机访问迭代器:功能最强,支持直接跳转到任意位置(如 it += 5),访问效率与数组下标相当,适合连续内存容器(如 vector)。
功能最弱到最强依次为:输入迭代器 → 输出迭代器 → 前向迭代器 → 双向迭代器 → 随机访问迭代器。
1、输入迭代器(Input Iterator):只读、单向遍历
1.1 核心特性
- 功能:仅支持 “只读访问” 和 “单向递增”(++),无法修改元素,且遍历过程中元素可能失效(不能重复遍历)。
- 关键操作:*it(读元素)、++it(向后移动)、it1 == it2/it1 != it2(比较)。
- 本质:“一次性读取工具”,如从流中读取数据,读取后数据可能不再可用。
1.2 适用容器 / 场景
- 标准库中的 istream_iterator(从输入流读取数据)、forward_list 的 const 迭代器(部分场景)。示例:用 istream_iterator 读取标准输入
1.3 示例
用 istream_iterator 读取标准输入
[code]#include #include // 包含 istream_iterator#include using namespace std;int main() { cout |
|
|
|
相关推荐
|
|