迭代器
begin/end、五种迭代器类别、自定义迭代器、反向迭代器
迭代器
迭代器是 STL 的"胶水"——它把容器和算法连接起来。理解迭代器类别是高效使用 STL 的关键。
学完本章你将: 掌握 begin/end、五种迭代器类别、反向迭代器。
迭代器基础
cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> v = {10, 20, 30, 40, 50};
// 迭代器 → 类似指针
auto it = v.begin(); // 指向第一个元素
auto end = v.end(); // 指向最后一个元素之后
while (it != end) {
std::cout << *it << " "; // 解引用
++it; // 前进
}
return 0;
}
五种迭代器类别
| 类别 | 能力 | 示例 |
|---|---|---|
| 输入迭代器 | 只读、单次、前向 | istream_iterator |
| 输出迭代器 | 只写、单次、前向 | ostream_iterator |
| 前向迭代器 | 读写、多次、前向 | forward_list |
| 双向迭代器 | 前向 + 后向 | list, map, set |
| 随机访问迭代器 | + - [] 下标 | vector, array, deque |
反向迭代器
cpp
std::vector<int> v = {1, 2, 3, 4, 5};
// rbegin → 最后一个元素,rend → 第一个元素之前
for (auto it = v.rbegin(); it != v.rend(); ++it) {
std::cout << *it << " "; // 5 4 3 2 1
}
插入迭代器
cpp
#include <iterator>
std::vector<int> src = {1, 2, 3};
std::vector<int> dst;
// back_inserter → 自动 push_back
std::copy(src.begin(), src.end(), std::back_inserter(dst));
// dst = {1, 2, 3}