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

迭代器的思想和实现细节

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.xdnf.cn/news/3776.html

相关文章:

  • 【序列化与反序列化详解】
  • 【漫话机器学习系列】237. TSS总平方和
  • 【2025软考高级架构师】——未来信息综合技术(11)
  • C++笔记-多态(包含虚函数,纯虚函数和虚函数表等)
  • 在MySQL中建索引时需要注意哪些事项?
  • Vue3源码学习5-不使用 `const enum` 的原因
  • 普推知产:图形商标通过初审,图形商标申请时注意!
  • 【深度学习】典型的 CNN 网络
  • Linux第20节 --- inode和文件系统
  • qsort函数的用法
  • MySQL 日期加减函数详解
  • 61常用控件_QDateTimeEdit的使用
  • 用Maven定位和解决依赖冲突
  • 研究主题:聊天机器人使用与情感纽带的形成
  • 归并排序【逆序对】
  • 【AI面试准备】数据驱动测试思维与实践指南
  • 使用Node.js搭建https服务器
  • 《Windows 环境下 Qt C++ 项目升级 GCC 版本的完整指南》
  • 如何在WORD WPS中输入英语音标 批量给英语标注音标
  • 【堆】最大堆、最小堆以及GO语言的实现
  • Redis从入门到实战实战篇2
  • 智能家居的OneNet云平台
  • Linux进程间通信(二)之管道1【匿名管道】
  • 【2025软考高级架构师】——数据库系统(10)
  • SpringBoot上传文件到阿里云OSS对象存储
  • 数据赋能(211)——质量管理——数据可验证性原则
  • 【Mytais系列】介绍、核心概念
  • 【浅学】Windows下ffmpeg+nginx+flv将本地视频推流在本地搭建的Web前端页面中播放,超详细步骤
  • C++ 抽象工厂模式详解
  • [Vue]编程式导航