当前位置: 首页 > news >正文

vector和string的迭代器

1. 迭代器的本质

(1) 标准要求
  • C++ 标准要求 std::string 和 std::vector 的迭代器必须是 随机访问迭代器(Random Access Iterator)。

  • 指针天然满足随机访问迭代器的所有操作(如 ++--+n* 等),因此可以直接用指针实现。

(2) 典型定义

cpp

// vector 和 string 的迭代器通常类似以下形式
typedef T* iterator;          // 非常量迭代器
typedef const T* const_iterator; // 常量迭代器

2. MSVC 的实现

(1) std::vector 迭代器
  • 直接使用指针

    cpp

    template<class T>
    class vector {
    public:typedef T* iterator;typedef const T* const_iterator;// ...
    };
  • Debug 模式增强

    • 在 Debug 模式下,MSVC 会用封装类(如 _Checked_iterator)包裹指针,添加边界检查和迭代器校验。

(2) std::string 迭代器
  • 类似 vector

    cpp

    typedef char* iterator;       // 非常量迭代器
    typedef const char* const_iterator;
  • Debug 模式

    • 同样会封装为安全迭代器,防止越界访问。


3. GCC 的实现

(1) std::vector 迭代器
  • 直接使用指针

    cpp

    template<class T>class vector {public:typedef T* iterator; typedef const T* const_iterator;// ...
    };
  • 无 Debug 封装

    • GCC 默认不添加调试校验,迭代器就是原生指针。

(2) std::string 迭代器
  • 依赖 SSO 实现

    • 短字符串(SSO):迭代器指向内部缓冲区(如 _M_p)。

    • 长字符串:迭代器指向堆内存。

    cpp

    typedef char* iterator;
    typedef const char* const_iterator;

4. 关键差异

特性MSVCGCC
迭代器类型指针或调试封装类直接使用指针
Debug 校验有(防止越界和失效迭代器)
性能影响Debug 模式较慢,Release 无差异始终高效

相关文章:

  • BG开发者日志505:项目总体情况
  • PowerPC架构详解:定义、应用及特点
  • 软件管理(安装方式)
  • MCP 探索:MCP 集成的相关网站 Smithery、PulseMCP 等
  • MySQL安装完全指南:从零开始到配置优化(附避坑指南)
  • 【Python生成器与迭代器】核心原理与实战应用
  • 【Python实战】飞机大战
  • 吾爱出品 [Windows] EndNote 21.5.18513 汉化补丁
  • 【进阶】C# 委托(Delegate)知识点总结归纳
  • Rotary Positional Embedding
  • QT6 源(72):阅读与注释单选框这个类型的按钮 QRadioButton,及各种属性验证,
  • 存在重复元素II(简单)
  • Three.js在vue中的使用(二)-加载、控制
  • web应用开发说明文档
  • 连续变量与离散变量的互信息法
  • pcf8563时钟驱动编写记录
  • C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 20)
  • Java响应式编程
  • 【C++篇】类和对象(上)
  • 第6章 Python 基本数据类型详解(int, float, bool, str)细节补充
  • 巴菲特宣布将于年底退休,“接班人”什么来头?
  • 在“蟑螂屋”里叠衣服,我看见人生百态
  • 首次面向上海、江苏招收本科生,西湖大学接连发布招生简章
  • 重庆市大渡口区区长黄红已任九龙坡区政协党组书记
  • 龙翔被撤销南京市人大常委会主任职务,此前已被查
  • 人民日报钟声:国际社会应共同维护科学溯源的正确方向