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

STL-list链表

STL-list链表实现

STL中采用双向带头循环链表来实现 list,下面将使用 C++ 实现 STL list 链表。

链表

list 类中包含两个主要部分,一个是指向哨兵位头节点的指针(_head,另一个是结构体类型的迭代器(__list_iterator

哨兵位头节点本身是不存储数据的,它只是用于简化代码实现操作的,让 list 的头插尾插更加的方便。在 list 中通过指向哨兵位头节点的指针(_head)用于链接节点,实现高效快速地访问_next)和_prev)。

stringvector 中我们可以通过指针++访问下一个元素,这是因为它们俩都是顺序存储一片连续不断的内存空间,自然地可以实现指针++访问下一个元素。所以它们俩的迭代器基本就是原生指针套了一个壳子叫 iterator 以配合STL的统一设计。

但是如果想实现遍历 list 容器,单靠指针++访问下一个元素是实现不了的,因为链表很灵活,每个节点的内存空间并不一定连续,所以不能单靠指针++访问下一个元素是做不到的。但是为了实现迭代器++访问下一个元素我们得对 list 的迭代器进行特殊的封装,以实现迭代器++访问下一个元素的操作。

节点模型

首先我们先来了解 list 的节点模型,list 中链接着许多的节点,每个节点都是一个节点模型的实现。都具有前后指针_prev_next),和一个数据值_val)。

template <typename T>
struct list_node
{
    list_node
http://www.dtcms.com/a/122198.html

相关文章:

  • mac 苍穹外卖 后端初始 SkyApplication 报错
  • HTTP:一.概述
  • 【Leetcode-Hot100】移动零
  • 净室软件工程:以数学为基石的高可靠性软件开发之道
  • 数学建模--在新能源汽车研发测试中的革命性应用
  • 最小覆盖子串 -- 滑动窗口
  • MMO 架构梳理
  • 分布式ID生成器设计详解
  • 直流有刷电机与H桥驱动
  • JavaScript数据结构-Map的使用
  • Oracle JDBC驱动 ojdbc14:使用指南与版本说明(附资源下载)
  • 建筑兔零基础自学记录69|爬虫Requests-2
  • 开篇 - Unlua+VsCode的智能提示、调试
  • 缓存工具类
  • 嵌入式 C语言 位操作 宏命令
  • spring boot 2.7 集成 Swagger 3.0 API文档工具
  • centos7系统搭建nagios监控
  • 【AI】MCP+cline 实现github官网项目查询
  • .vue文件中组件名称的设置,<script>标签的 name 属性说明
  • JS—浏览器的缓存策略:3分钟精通浏览器缓存策略
  • Vue3中watch监视reactive对象方法详解
  • Java 设计模式:单例模式详解
  • 【算法笔记】并查集详解
  • 蚂蚁 Flink 实时计算编译任务 Koupleless 架构改造
  • 2025年港口危货储存单位主要安全管理人员备考练习题
  • JVM 不同的垃圾收集算法分别有什么优缺点?
  • 【AI】MCP概念
  • 安全理念和安全产品发展史
  • 整合线下资源视角下定制开发开源AI智能名片S2B2C商城小程序的应用研究
  • git 如何彻底删除已经提交到远程仓库的文件?而不是覆盖删除?git 如何删除已经提交到本地的文件?从历史记录中彻底清除彻底删除(本地+远程)