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 無差異始終高效

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/79555.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/79555.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/79555.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PyCharm代理配置全攻略:系統設置+Python運行環境一鍵搞定

文章目錄 1. 設置系統代理1.1 作用范圍1.2 使用場景1.3 設置步驟 2. 設置 python 運行/調試代理2.1 作用范圍2.2 使用場景2.3 設置步驟 Pycharm 工具作為一款強大的 IDE&#xff0c;其代理配置在實際開發中也是必不可少的&#xff0c;下面介紹下如何配置 Pycharm 的代理。 1. …

stm32 g031g8 flash擦除函數被坑

先記錄一下在擦除的時候由于調用了這個FLASH_PageErase(FLASH_BANK_1, secpos); 導致擦除不成功&#xff0c;寫入失敗。 下面的擦除有問題// 使用 FLASH_PageErase 擦除該頁while ((FLASH->SR & FLASH_SR_BSY1) ! 0); // 等待空閑FLASH_PageErase(FLASH_BANK_1, secpo…

深度學習與 PyTorch 基礎

筆記 1 深度學習簡介 1.1 深度學習概念 深度學習是機器學習的一類算法, 以人工神經網絡為結構, 可以實現自動提取特征 深度學習核心思想是人工神經網絡為結構, 自動提取特征 1.2 深度學習特點 自動提取特征 解釋性差 大量數據和高性能計算能力 非線性轉換(引入非線性因…

【Unity】XLua訪問C#文件

創建NPC.cs&#xff1a; public class NPC { public string name; public int age; public void Say() { Debug.Log("Say:我是未被修改的"); } public static void Say() { Debug.Log("Static Say:我是未被修改的"); } public void Say2(int a) { Debug.Lo…

【第十六屆藍橋杯省賽】比賽心得與經驗分享(PythonA 組)

文章目錄 一、我的成績二、我的備賽經歷三、如何備賽&#xff08;個人觀點&#xff09;1. 基礎語法2. 數據結構3. 算法4. 數學 四、做題技巧與注意事項五、我的題解試題A 偏藍 &#x1f3c6;100%試題B IPV6 &#x1f3c6;0%試題C 2025圖形 &#x1f3c6;100%試題D 最大數字 &am…

基于Springboot+Mysql的校園博客系統(含LW+PPT+源碼+系統演示視頻+安裝說明)

系統功能 管理員功能&#xff1a;首頁、個人中心、博主管理、文章分類管理、文章信息管理、舉報投訴管理、系統管理&#xff1b;博主功能&#xff1a;首頁、個人中心、文章信息管理、舉報投訴管理、我的收藏管理&#xff1b;前臺首頁功能&#xff1a;首頁、文章信息、系統公告…

第三次作業(密碼學)

#include <stdio.h> #include <stdlib.h> // 計算最大公約數 int gcd(int a, int b) { while (b ! 0) { int temp b; b a % b; a temp; } return a; } // 計算模冪運算 int mod_pow(int base, int exponent, int modulus) { …

3.0/Q1,Charls最新文章解讀

文章題目&#xff1a;Association between outdoor artificial light at night and metabolic diseases in middle-aged to older adults-the CHARLS survey DOI&#xff1a;10.3389/fpubh.2025.1515597 中文標題&#xff1a;夜間戶外人工光與中老年人代謝性疾病的關聯-CHARLS調…

MATLAB 中zerophase函數——零相位響應

零相位響應&#xff08;Zero-Phase Response&#xff09;是指濾波器的幅度函數&#xff0c;但相位為零。濾波器的相位響應為零&#xff0c;意味著不同頻率的信號通過濾波器后&#xff0c;其相位不發生任何變化&#xff0c;即信號的波形在時間軸上沒有偏移。 零相位響應指的是當…

馬克思最基本的哲學思想--改造世界以實現人的自由全面發展--deepseek

馬克思的哲學思想可以概括為“改造世界以實現人的自由全面發展”&#xff0c;這句話看似簡單&#xff0c;卻包含了其哲學的核心邏輯。我們可以從三個層面展開分析&#xff1a; 1. “改造世界”——實踐是哲學的終極使命 馬克思在《關于費爾巴哈的提綱》中寫道&#xff1a; “哲…

JAVA學習-練習試用Java實現“一個簡單的文本摘要系統 :基于關鍵詞提取或句子摘要”

問題&#xff1a; java語言編輯&#xff0c;實現一個簡單的文本摘要系統 &#xff1a;基于關鍵詞提取或句子摘要。 解答思路&#xff1a; 實現一個簡單的文本摘要系統&#xff0c;我們可以采用基于關鍵詞提取的方法。以下是一個簡單的Java實現&#xff0c;使用TF-IDF&#xff0…

案例解析:基于量子計算的分子對接-QDOCK(Quantum Docking)

分子對接&#xff08;Moleculardocking&#xff09;在藥物發現中具有重要意義&#xff0c;但對接的計算速度和準確率始終難以平衡&#xff0c;其巨大解搜索空間對傳統計算機來說異常艱巨。 本文通過引入網格點匹配&#xff08;GPM, Grind point matching&#xff09;和特征原子…

【Mytais系列】Datasource模塊:數據源連接

MyBatis 的 DataSource 模塊是框架與數據庫交互的核心基礎設施&#xff0c;負責管理數據庫連接的創建、分配、釋放及池化&#xff0c;直接影響 SQL 執行效率和資源利用率。以下是其核心內容、功能及在 SQL 執行中的作用詳解&#xff1a; 一、DataSource 模塊的核心組件 組件 功…

React 組件prop添加類型

給函數的props做注解 import { useState } from reacttype Props { className:string,title?:string } // 自定義一個Button組件 function Button(props:Props){// 解構出classname\const {className} propsreturn <button className{className}>點擊我</button&g…

MCP多智能體消息傳遞機制(Message Passing Between Agents)

目錄 &#x1f680; MCP多智能體消息傳遞機制&#xff08;Message Passing Between Agents&#xff09; &#x1f31f; 為什么要引入消息傳遞機制&#xff1f; &#x1f3d7;? 核心設計&#xff1a;Agent間消息傳遞模型 &#x1f6e0;? 1. 定義標準消息格式 &#x1f6e…

高中數學聯賽模擬試題精選學數學系列第4套幾何題

△ A B C \triangle ABC △ABC 的外心為點 O O O, 外接圓為 Γ \Gamma Γ. 射線 A O AO AO, B O BO BO, C O CO CO 分別交 Γ \Gamma Γ 于點 D D D, E E E, F F F. X X X 是 △ A B C \triangle ABC △ABC 內部的一點. 射線 A X AX AX, B X BX BX, C X CX CX 分…

如何實現Prometheus告警規則動態配置

在大部分的項目中都有自定義告警規則的需求&#xff0c;目前市面上都是基于Prometheus實現的監控告警。但是Prometheus本身并不支持修改告警規則自動生效&#xff0c;我們可以通過下面這些步驟實現告警規則動態配置。 1. 啟動Promethues并指定參數--web.enable-lifecycle noh…

私人醫生通過AI分析基因數據,是否有權提前告知癌癥風險?

首席數據官高鵬律師團隊編著 在精準醫療的浪潮中&#xff0c;私人醫生借助AI技術解析基因數據、預判癌癥風險&#xff0c;已成為高端醫療服務的“隱形標配”。然而&#xff0c;這一技術的光環之下&#xff0c;潛藏著法律與倫理的復雜博弈——醫生是否有權基于AI的基因分析提前…

TFT(薄膜晶體管)和LCD(液晶顯示器)區別

TFT&#xff08;薄膜晶體管&#xff09;和LCD&#xff08;液晶顯示器&#xff09;是顯示技術中常見的術語&#xff0c;二者既有聯系又有區別。以下是它們的核心區別和關系&#xff1a; 1. 基本概念 LCD&#xff08;液晶顯示器&#xff09; LCD是一種利用液晶材料特性控制光線通…

Go小技巧易錯點100例(二十八)

本期分享&#xff1a; 1. runtime.Caller(1)獲取調用者信息 2. for循環 select{}語法 正文&#xff1a; runtime.Caller(1)獲取調用者信息 在 Go 語言中&#xff0c;runtime.Caller(1) 是 runtime 包提供的一個函數&#xff0c;用于獲取當前 goroutine 的調用堆棧中的特定…