迭代器的思想和實現細節

1. 迭代器的本質

迭代器是一種行為類似指針的對象,它可能是指針(如?std::vector?的迭代器),也可能是封裝了指針的類(如?std::list?的迭代器)。如果是指針那天然就可以用下面的運算,如果是類,就要重載下面的運算符:

  • *iter:獲取元素的引用。? (解引用運算符)

  • iter->member:訪問元素的成員(若元素是對象)。? ? (成員訪問運算符)

  • ++iter?/?--iter:指針移動到下一個/上一個元素。

2.迭代器的?->?行為

迭代器如果是類對象(非指針),需要重載?operator->()。標準規定:

  • 當寫?it->member?時,編譯器會編指令編成:

    1. 調用?it.operator->(),獲取一個 元素的指針(比如?T*)。

    2. 對元素的指針?自動再調用?->,最終訪問成員。

偽代碼演示

cpp

// 假設迭代器類內部:
class ListIterator {Node* current; // 節點指針
public:// 重載 ->Person* operator->() { return &(current->data); // 返回對象指針}
};// 使用時:
it->name;
// 實際展開:
(it.operator->())->name; // 調用?it.operator->(),獲取一個 元素的指針(比如?T*)。元素指針?再調用?->,最終訪問成員。


?標準庫中的真實案例

(1)?std::list?的迭代器實現(GCC)

cpp

// 簡化版的 list 迭代器
template<typename _Tp>
struct _List_iterator {_List_node* _M_node; // 節點指針_Tp* operator->() const {return &(_M_node->_M_data); // 返回數據對象的指針}
};// 使用時:
std::list<Person>::iterator it = people.begin();
it->age; // 實際等價于:(it. operator->())->age

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

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

相關文章

工業傳動核心部件深度剖析:絲桿升降機與氣缸的技術特性及選型指南

在工業自動化技術飛速發展的當下&#xff0c;絲桿升降機與氣缸作為關鍵的直線傳動部件&#xff0c;廣泛應用于各類機械設備中。對于工程師而言&#xff0c;深入了解它們的技術特性、優缺點及適用場景&#xff0c;是實現高效、精準設備設計的重要前提。本文將從技術原理出發&…

HarmonyOS NEXT——DevEco Studio的使用(還沒寫完)

一、IDE環境的搭建 Windows環境 運行環境要求 為保證DevEco Studio正常運行&#xff0c;建議電腦配置滿足如下要求&#xff1a; 操作系統&#xff1a;Windows10 64位、Windows11 64位 內存&#xff1a;16GB及以上 硬盤&#xff1a;100GB及以上 分辨率&#xff1a;1280*8…

Modbus 通訊協議(超詳細,簡單易懂)

目錄 一、協議中的寄存器定義 二、協議概述 三、使用串口的Modbus 報文幀 ?編輯 3.1、Modbus ASCII 模式 3.2、Modbus RTU 模式 3.3、功能碼概要 3.4、Modbus 報文分析 四、什么是RS-485 RS-232&#xff1f; 一、協議中的寄存器定義 閱讀 Modbus 協議時會發現它的概念別扭…

計算機總線系統入門:理解數據傳輸的核心

一、總線系統簡介&#xff1a;計算機內部的交通網絡 在計算機系統中&#xff0c;總線是指連接各個組件的一組共享信號線或傳輸通道&#xff0c;用于在系統內不同的硬件模塊之間傳遞數據、地址、控制信號等信息。它類似于交通系統中的道路&#xff0c;幫助計算機各個部件&#…

《應用開發突圍指南:敏捷開發的實戰精髓》

如何在應用開發中精準且深入地應用敏捷開發方法呢&#xff1f;讓我們一同深入探索。 敏捷開發&#xff0c;絕非僅僅是一種開發流程&#xff0c;更是一種蘊含深刻智慧的理念與思維方式。它與傳統開發模式有著本質的區別&#xff0c;傳統開發模式如同嚴謹的線性旅程&#xff0c;…

《高性能MySQL》第1講:MySQL架構

MySQL是一個非常流行的關系型數據庫管理系統,它的設計非常靈活,能夠適應多種不同的應用場景。無論是Web應用、數據倉庫,還是高可用性系統,MySQL都能勝任。為了更好地理解MySQL的工作原理,我們需要從它的架構入手。 1.1 MySQL邏輯架構 首先,我們來看一下MySQL的邏輯架構…

數據賦能(212)——質量管理——統一性原則

概述 數據統一性原則在數據管理的各個環節中都具有不可忽視的重要性。它確保了數據在不同部門、系統和時間點上的一致性和可比性&#xff0c;為企業的決策制定、業務分析、風險管理等提供了準確、可靠的數據支持。 原則定義 數據統一性原則&#xff1a;在數據的收集、處理、…

btrace1.0使用方法

記于 2022 年 6 月 24 日 btrace1.0使用方法 - Wesley’s Blog 注意&#xff1a;目前僅限于macos和linux使用 btrace/README.zh-CN.md at master bytedance/btrace GitHub btrace(又名 RheaTrace) 是一個基于 Systrace 實現的高性能 Android trace 工具&#xff0c;它支持在…

C++八股--5--設計模式--適配器模式,代理模式,觀察者模式

3. 觀察者模式&#xff08;也叫做觀察者-監聽者模式&#xff0c;發布-訂閱模式&#xff09; 主要關注對象的一對多關系&#xff0c;也就是多個對象都依賴于一個對象&#xff0c;當該對象狀態改變時&#xff0c;其余對象都能得到對應的通知 如&#xff1a;一組數據&#xff08;數…

ArcGIS arcpy代碼工具——根據屬性結構表創建shape圖層

系列文章目錄 ArcGIS arcpy代碼工具——關于工具使用的軟件環境說明 ArcGIS arcpy代碼工具——批量對MXD文件的頁面布局設置修改 ArcGIS arcpy代碼工具——數據驅動工具批量導出MXD文檔并同步導出圖片 ArcGIS arcpy代碼工具——將要素屬性表字段及要素截圖插入word模板 ArcGIS…

機器視覺開發-打開攝像頭

以下是使用Python和OpenCV打開攝像頭的最簡單實現&#xff1a; import cv2# 打開默認攝像頭&#xff08;通常是0&#xff09; cap cv2.VideoCapture(0)# 檢查攝像頭是否成功打開 if not cap.isOpened():print("無法打開攝像頭")exit()print("攝像頭已打開 - 按…

(Go Gin)Gin學習筆記(三)數據解析和綁定:結構體分析,包括JSON解析、form解析、URL解析,區分綁定的Bind方法

1. 數據解析和綁定 bind或bindXXX函數&#xff08;后文中我們統一都叫bind函數&#xff09;的作用就是將請求體中的參數值綁定到對應的結構體上&#xff0c;以方便后續業務邏輯的處理 1.1 JSON數據解析和綁定 客戶端傳參&#xff0c;后端接收并解析到結構體 package mainim…

Kubernetes(k8s)學習筆記(四)--入門基本操作

本文通過kubernetes部署tomcat集群&#xff0c;來學習和掌握kubernetes的一些入門基本操作 前提條件 1.各個節點處于Ready狀態&#xff1b; 2.配置好docker鏡像庫(否則會出現ImagePullBackOff等一些問題)&#xff1b; 3.網絡配置正常(否則即使應用發布沒問題&#xff0c;瀏…

【大模型面試每日一題】Day 7:為什么大模型訓練選擇 Adam 而非 SGD?Adam 的關鍵改進是什么?

【大模型面試每日一題】Day 7&#xff1a;為什么大模型訓練選擇 Adam 而非 SGD&#xff1f;Adam 的關鍵改進是什么&#xff1f; &#x1f4cc; 題目重現 &#x1f31f;&#x1f31f; 面試官&#xff1a;為什么大模型訓練選擇 Adam 而非 SGD&#xff1f;Adam 的關鍵改進是什么…

輕量級在線Excel預覽工具

輕量級在線Excel預覽工具 簡介 在日常工作中&#xff0c;我們經常需要快速查看Excel文件的內容&#xff0c;但不一定總是需要打開完整的Excel軟件。為了解決這個問題&#xff0c;我開發了一個輕量級的在線Excel預覽工具&#xff0c;讓您可以通過瀏覽器快速查看Excel文件內容。…

[Vue]props解耦傳參

在 Vue 中&#xff0c;通過 props 傳遞路由參數&#xff08;即 props 解耦&#xff09;是一種將組件與路由參數解耦的推薦方式。這種方法能顯著提升組件的獨立性、復用性和可維護性。以下是詳細解釋&#xff1a; 一、什么是 props 解耦&#xff1f; props 解耦是指&#xff1a…

Trae 使用心得:從新手到上手

Trae 使用心得&#xff1a;從新手到上手 最近&#xff0c;我開始試用 Trae&#xff0c;一款新興的 AI 開發工具。在使用過程中&#xff0c;我發現它與我之前用過的 Cursor 有些不同&#xff0c;也帶來了一些新的體驗。 初體驗&#xff1a;操作的便利性 一開始&#xff0c;我…

游戲引擎學習第256天:XBox 控制器卡頓和修復 GL Blit 伽瑪問題

回顧并為今天定下基調 今天的主要任務是讓我們的性能分析工具正常工作&#xff0c;因為昨天已經完成了結構性工作。現在&#xff0c;剩下的工作大部分應該是調試和美化。性能分析工具現在應該已經基本可用了。昨天我們在這個方面取得了很大的進展。 接下來&#xff0c;我們將…

PVD中斷檢測掉電

文章目錄 概述配置掉電擦寫注意 概述 STM32 PVD功能具體可以檢測到上電、掉電瞬間&#xff0c;其處理方式有中斷響應及事件響應。掉電設置為上升沿觸發&#xff0c;上電為下降沿觸發 配置 1.開啟PVD中斷并設置其優先級 2.配置響應中斷或事件的閾值電壓 3.配置響應模式 生成…

快速掌握--cursor

Cursor - The AI Code Editor 官網下載安裝 詳細教程&#xff1a;cursor 下載安裝使用&#xff08;保姆教程&#xff09;_cursor下載-CSDN博客 不知道為啥&#xff0c;第一次給我用的是繁體回答 然后改了一下詢問方式 codebase就是告訴ai可以從整個項目中找答案&#xff0…