0%
boxmoe_header_banner_img

加载中

迭代器基本知识


avatar
mizuki 2026年6月7日 2026年6月7日 9

引言

迭代器作为C++中新加的内容,在C++中起着十分大的作用,这篇文章将介绍迭代器的基本知识和基本使用

1.正向迭代器(iterator)

  • 1.1 意义

迭代器是一种访问容器元素的通用接口,它的核心作用是遍历容器。你可以把它理解为“指向容器中某个元素的指针”,但比指针更抽象、更通用

  • 1.2 用法

1.获取容器的起始位置

    // 获取起始迭代器(指向第一个元素)
        std::vector<int> vec = {10, 20, 30, 40, 50};
        std::vector<int>::iterator it = vec.begin();

    2.获取指向容器末尾的下一个位置

    // 结束迭代器(指向末尾的下一个位置,无效,仅用于判断)
        std::vector<int>::iterator end = vec.end();

    至于为什么要指向末尾的下一个位置,那是为了遍历容器而做准备

    3.解引用访问元素

    // 解引用访问元素(类似指针)
        std::cout << *it;        // 输出 10

    4.利用++和–找到上一个或下一个位置

    // 自增移动到下一个元素
        ++it;
        std::cout << *it;        //输出 20
        --it;
        std::cout << *it;        //输出10

    5.遍历容器

    // 遍历容器(最经典的写法)
        for (it = vec.begin(); it != vec.end(); ++it) 
        {
            std::cout << *it << " ";
        }
    • 1.3 特点

    对于所有的容器都可以用类似的方式去使用对应的迭代器

    2.反向迭代器(reverse_iterator)

    • 2.1 意义

    用来反向遍历容器,与正向迭代器反过来

    • 2.2 用法

    用法与正向迭代器基本相同,只是反过来了而已,这里给出反向遍历的例子:

    std::vector<int> vec = {10, 20, 30, 40, 50};
    std::vector<int>::iterator it = vec.rbegin();
    for(: it != vec.rend(); it++)
    {
       cout << *it << " ";
    }
    cout << endl;  

    3.const迭代器

    • 3.1 意义

    明确表达”只读遍历”的意图,防止意外修改

    • 3.2 用法

    这里给出一个const迭代器遍历的例子:

    std::vector<int> vec = {10, 20, 30, 40, 50};
        
        // ========== 1. 基本遍历 ==========
        std::cout << "【1. 基本遍历】\n";
        for (std::vector<int>::const_iterator it = vec.begin(); 
             it != vec.end(); ++it) {
            std::cout << *it << " ";    // 只读访问
            // *it = 100;               // ❌ 编译错误:不能修改
        }

    4.auto类型

    • 4.1 意义

    可以自动识别对应的类型

    • 4.2 用法

    我们可以发现,在之前的迭代器写法中,迭代器的类型要写很长一段,十分的冗余,因此我们可以采用auto类型来减少代码长度,提升效率的同时还不易出错

    //例如对于const迭代器,我们可以这样写
    vector<int> v1 = {1, 2, 3, 4, 5};
    auto it = v1.cbegin();

    5.范围for

    • 5.1 意义

    核心意义在于简化迭代器操作、减少错误、提升代码可读性,在低错误的情况下更好的遍历容器

    • 5.2 用法
    for (auto e : v) {
        cout << e;         // 直接是元素,不会解引用错
    }
    • 5.3 内核

    范围for的内核就是利用迭代器进行遍历容器,只要容器存在迭代器就可以使用范围for,就算是自定义容器也是一样的道理

    • 5.4 特点

    1. 自动赋值

    2.自动迭代

    3.自动判断遍历结束

    4.正常使用范围for是拷贝,想要修改内容要加上引用&,如下:

    for (auto& e : v) {
        cout << e;
        e = 1;         // 直接是元素,不会解引用错
    }

    这样就可以将v中的所有元素修改为1

    总结

    迭代器是C++中不可或缺的一部分,在之后的学习中我们还要学会自己写自定义类型的迭代器去使用,因此在这里打下基础是十分重要的

    上一次更新已经跑远了✨ 计算中...
    (‾◡◝) 本内容里的一些消息,可能已经跟不上时间啦~


    评论(0)

    查看评论列表

    暂无评论


    发表评论

    表情 颜文字

    插入代码
    小园得志

    北京时间 (Asia/Shanghai)

    后退
    前进
    刷新
    复制
    粘贴
    全选
    删除
    返回首页
    0%
    目录
    顶部
    底部
    📖 文章导读