Z
ZHANK
模板与 STL

迭代器

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}