迭代器是C++ STL中用于遍历容器元素的通用机制,其行为类似指针,支持解引用、自增等操作。不同容器提供不同类型迭代器:vector支持随机访问迭代器,list为双向迭代器,map迭代器指向键值对,需通过first和second访问键值。常见操作包括begin()、end()、*it、++it等。使用时需避免失效迭代器、不越界解引用,并推荐使用auto简化声明,掌握迭代器是理解STL的关键。

在C++中,迭代器(iterator)是用于遍历容器元素的一种通用机制。它类似于指针,可以指向容器中的某个元素,并通过自增、解引用等操作访问数据。使用迭代器可以让算法与具体容器类型解耦,提高代码的通用性和可维护性。
什么是迭代器
迭代器是一种对象,它提供了一种统一的方式来访问标准模板库(STL)容器中的元素,比如 vector、list、set、map 等。每种容器都定义了自己的迭代器类型,但使用方式基本一致。
常见的迭代器操作包括:
- *it:解引用,获取当前指向的元素值
- ++it 或 it++:移动到下一个元素
- it == other:判断两个迭代器是否相等
- it != other:判断是否不相等
- it = container.begin():指向第一个元素
- it = container.end():指向最后一个元素的后一个位置(哨兵位置)
常见容器的迭代器使用示例
以下是一些常用容器中迭代器的基本用法。
立即学习“C++免费学习笔记(深入)”;
1. vector 的迭代器vector 支持随机访问迭代器,可以高效地进行遍历和随机访问。
#include输出:#include using namespace std; int main() { vector vec = {1, 2, 3, 4, 5}; // 使用迭代器遍历 for (auto it = vec.begin(); it != vec.end(); ++it) { cout << *it << " "; } cout << endl; return 0; }
1 2 3 4 5
2. list 的迭代器
list 是双向链表,支持双向迭代器。
#include输出:#include using namespace std; int main() { list
names = {"Alice", "Bob", "Charlie"}; for (auto it = names.begin(); it != names.end(); ++it) { cout << *it << " "; } cout << endl; return 0; }
Alice Bob Charlie
3. map 的迭代器
map 的迭代器指向的是键值对(pair),需要用 first 和 second 访问。
#include输出:#include
ID: 101, Name: Tom
ID: 102, Name: Jerry
迭代器的种类
C++ 中根据功能强弱将迭代器分为五类:
- 输入迭代器(Input Iterator):只能读取一次数据,支持前向移动
- 输出迭代器(Output Iterator):只能写入一次数据,支持前向移动
- 前向迭代器(Forward Iterator):可多次读写,仅支持 ++ 操作
- 双向迭代器(Bidirectional Iterator):支持 ++ 和 --,如 list、set
- 随机访问迭代器(Random Access Iterator):支持 +n、-n、[] 等操作,如 vector、deque
不同容器提供的迭代器类型不同,决定了能执行的操作范围。
使用注意事项
使用迭代器时要注意以下几点:
- 不要使用失效的迭代器:例如在 vector 插入元素后,原有迭代器可能失效
- end() 返回的是尾后位置,不能解引用
- 循环中尽量使用 ++it 而非 it++:避免临时对象开销(虽然现代编译器会优化)
-
优先使用 auto 简化声明:如
auto it = vec.begin();
基本上就这些。掌握迭代器的使用是学习 STL 的关键一步,理解其原理有助于写出更通用、高效的 C++ 代码。











