一、迭代器:数据世界的万能遥控器 🎮
1.1 为什么需要迭代器?
想象你有一个装满玩具的箱子(容器),你想:
- 🚗 逐个查看所有玩具(遍历)
- 🧸 找到特定的玩具熊(查找)
- ✨ 把玩具按大小排列(排序)
如果每个箱子的打开方式都不同(数组用下标、链表要指针、文件流特殊操作),你会疯掉的!迭代器就是解决这个问题的万能遥控器,它让所有容器都有了统一的操作接口!
vector<int> vec{1,2,3};
list<string> lst{"A","B","C"};
set<double> s{3.14, 2.718};auto vec_it = vec.begin(); // 获取向量遥控器
auto lst_it = lst.begin(); // 获取链表遥控器
auto s_it = s.begin(); // 获取集合遥控器
二、迭代器五大神兽(类型全解析) 🦄
2.1 神兽能力评级表
迭代器类型 | 超能力 | 代表容器 | 特色招式 |
---|---|---|---|
输入迭代器 | 单向前进,只读一次 | istream | 读取流数据 |
输出迭代器 | 单向前进,只写一次 | ostream | 写入流数据 |
前向迭代器 | 多次前向移动 | forward_list | 单链表遍历 |
双向迭代器 | 自由进退 | list/map/set | 逆向操作 |
随机访问 | 任意跳跃 | vector/string | []运算符、+=n |
2.2 神兽使用说明书
(1) 随机访问迭代器(最强王者)
vector<int> vip{10,20,30,40,50};
auto remote = vip.begin();cout << remote[3]; // 直接跳转到第4个位置 → 40
remote += 2; // 前进2步
cout << *remote; // 30
advance(remote, -1); // 后退1步 → 20
(2) 双向迭代器(优雅舞者)
list<string> dance{"探戈","华尔兹","恰恰"}