C++ - STL - 迭代器

什么是迭代器?🤔

想象一下,你有一排整齐的书架,上面放着很多书。你现在想从第一本开始,一本一本地看书名。你怎么做呢?

你会用手指指着第一本书,看完书名后,手指移动到下一本书,再看书名,这样一直指到最后一本书。

在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

posted @ 2025-09-12 15:34  一亩食堂  阅读(39)  评论(0)    收藏  举报