迭代器的思想和实现细节

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.mzph.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…