什么是迭代器?🤔
想象一下,你有一排整齐的书架,上面放着很多书。你现在想从第一本开始,一本一本地看书名。你怎么做呢?
你会用手指指着第一本书,看完书名后,手指移动到下一本书,再看书名,这样一直指到最后一本书。
在C++的STL中,迭代器就是你的"手指"!它用来"指向"容器(比如数组、列表等)中的元素,然后你可以通过移动迭代器来访问所有元素。
最简单的迭代器用法
1. 获取迭代器
每个容器都有两个重要的迭代器:
-
begin() - 指向第一个元素
-
end() - 指向最后一个元素的下一个位置(不是最后一个元素!)
#include <iostream>
#include <vector>
using namespace std;
int main() {vector<int> numbers = {10, 20, 30, 40, 50};// 获取指向第一个元素的迭代器auto it = numbers.begin();// 获取指向"结尾后一个位置"的迭代器auto end_it = numbers.end();return 0;
}
2. 用迭代器访问元素
用 * 符号来获取迭代器指向的元素值(就像用 * 获取指针指向的值一样):
vector<int> numbers = {10, 20, 30, 40, 50};
auto it = numbers.begin();cout << *it << endl; // 输出:10(第一个元素)
3. 移动迭代器
用 ++
让迭代器指向下一个元素:
vector<int> numbers = {10, 20, 30, 40, 50};
auto it = numbers.begin();cout << *it << endl; // 输出:10
it++; // 移动到下一个元素
cout << *it << endl; // 输出:20
it++; // 再移动一次
cout << *it << endl; // 输出:30
实际使用例子 ✨
例子1:遍历vector的所有元素
#include <iostream>
#include <vector>
using namespace std;int main() {vector<int> scores = {85, 92, 78, 90, 88};// 从第一个元素开始auto it = scores.begin();// 一直循环,直到到达结尾while (it != scores.end()) {cout << "分数: " << *it << endl;it++; // 移动到下一个元素}return 0;
}
输出结果:
text
分数: 85
分数: 92
分数: 78
分数: 90
分数: 88
例子2:更方便的遍历方法(推荐!)
C++提供了更简单的写法,不需要手动操作迭代器:
vector<int> scores = {85, 92, 78, 90, 88};// 超级简单的写法!
for (int score : scores) {cout << "分数: " << score << endl;
}// 这个循环背后其实就是用迭代器实现的
// 只是编译器帮我们处理了迭代器的细节
例子3:遍历字符串的每个字符
#include <iostream>
#include <string>
using namespace std;int main() {string name = "Hello";for (char c : name) {cout << "字符: " << c << endl;}return 0;
}
输出结果:
text
字符: H
字符: e
字符: l
字符: l
字符: o
为什么要用迭代器?🎯
统一访问方式:不管是什么容器(vector、list、set等),都可以用相同的方式遍历
安全:比用下标访问更安全,不容易越界
灵活:可以方便地配合STL算法使用
总结一下 📝
操作 | 代码 | 说明 |
---|---|---|
获取开始迭代器 | 容器.begin() |
指向第一个元素 |
获取结束迭代器 | 容器.end() |
指向最后一个元素的下一个位置 |
访问元素 | *迭代器 |
获取迭代器指向的元素值 |
移动到下一个 | 迭代器++ |
指向下一个元素 |
检查是否结束 | 迭代器 != 容器.end() |
判断是否遍历完所有元素 |
以上内容均来自deepseek