发布时间:2026/8/19 23:51:41
list 1 结构上是带头双向循环列表一、list的使用1.构造list同样空间配置器const allocator_type alloc allocator_type()先不用管1默认构造函数功能创建空 list不存任何元素。 explicit作用修饰类的构造函数禁止编译器做【单参数的隐式类型转换】只允许显式调用构造。只对可以接收单个实参的构造函数生效含带默认参数最终只需要传 1 个参数的构造。2size_type n要创建n 个元素const value_type val每个元素的值缺省时调用该类型默认构造。功能生成含有n个val副本的链表。3模板接收任意输入迭代器把 [first, last)左闭右开区间内的元素复制进 list。可以把别的容器vector、数组的一段内容拷贝到 list。4拷贝构造传入另一个同类型 list x深拷贝全部元素生成新链表。2.析构3.赋值4.迭代器链表不支持 [下标]可以实现但是代价是On不支持 迭代器-数字5.容量list没有扩容的概念所以没有reserve6.元素访问返回头 尾数据 。返回头尾后还可以修改因为有reference,是引用的意思。7.修改器1emplace_back和push_back功能一样原理不一样现在阶段无法了解9107之前介绍的接口功能和之前vector的功能保持一致8.链表专属操作1.reverse在算法库中也有冗余2.sort(无论是算法库还是list自己实现的sort默认实现都是升序。算法库还是list自己实现的sort想降序就需要用到一个叫仿函数的东西会在站和队列部分讲解)lessint小于仿函数等价逻辑 a b用于升序排序默认greaterint大于仿函数等价逻辑 a b用于降序排序头文件需要#includefunctionalless、greater是标准库提供的仿函数函数对象传匿名对象也可以3.合并 merge取小的尾插前提要求这两个列表有序4.unique 去重 要求数据有序5.remove 删除一个值给一个值找到就删6..remove_if对要删除的值附加条件若有该值且达成条件就删除7.splice 裁剪并粘接相当于转移被转移的源链表x对应的元素会被搬走源容器中不再拥有这些元素。可以自己转移自己(调整当前列表的顺序)1把链表x里面全部节点移动到调用该函数的 list 的position位置之前调用完成后x变为空链表2只把源链表 x 中迭代器 i 指向那 1 个节点移动到目标 position 前面。3把源链表x中 [first, last) 区间内所有节点整体移动到目标position前面。新节点出现在 pos 所指向元素的左边pos 指向的旧元素向后挪。插在pos 迭代器的前面不是覆盖 pos8.swap测试 迭代器在迭代器代码后添加下图范围for代码验证迭代器的旧用法原因list的迭代器不是原生指针。之前stringvector迭代器是原生指针原因是他们底层的空间是连续的用原生指针当迭代器的查找的效率很高。但链表的空间不连续它的底层是一个个自定义类型。9.迭代器的功能性质不同容器都会对迭代器会进行性质介绍用下面三张图中的三个单词表示性质这三个性质(单词)可以表示不同类型迭代器不同容器对应这些迭代器。list.链表专属操作中有sort,算法库中也有sort。list不可以用算法库中的sort之后探究迭代器继承能力← 代表 “继承 / 包含能力”越靠右能力越强Input ← Forward ← Bidirectional ← Random Access1.Input输入迭代器只向前遍历it只能读取不能写只能遍历一遍不能回退。2.Output输出迭代器只能向前遍历it只能写入*itxxx不能读取单遍遍历。Input、Output 是能力最低的两个概念模型没有容器的迭代器类型对应它们。Forward、Bidirectional、Random‑Access都可以降级充当 Input 或者 Output 迭代器传给算法。3.Forward前向迭代器继承 Input Output 的全部能力可以反复向前读写支持it❗不能向后走不支持 --it4.Bidirectional双向迭代器图中间方框继承 Forward 的全部能力✅支持 it 向前、--it 向后双向移动❗不支持迭代器加减数字it5、it‑3、[] 下标全部不行重点考点list是双向迭代器不能用全局算法std::sort()std::sort 强制要求随机访问迭代器list 只能调用自己的成员函数 .sort()。5.Random Access随机访问迭代器最右侧继承 Bidirectional 全部能力能力最强。可it、--it支持 itn、it‑n、it[]下标、迭代器比较 层级逻辑靠右的迭代器拥有左边全部功能可以降级当作左边类型使用左边不能当作右边。Random‑Access ⊃ Bidirectional ⊃ Forward ⊃ Input Output 是独立类别只负责写。探究之前“list.链表专属操作中有sort,算法库中也有sort。list不可以用算法库中的sort”算法库全局 std::sort(first,last)头文件algorithm这个算法强制要求【随机访问迭代器 Random‑AccessIterator】list 成员函数 lt.sort()链表专属成员函数只要求【双向迭代器 BidirectionalIterator】。图中将算法库全局 std::sort(first,last)要传的随机访问迭代器传成了【双向迭代器 】。所以报错emplace_back浅解没看二、使用接口现在写一个列表在第三个位置插入值为30的节点。由于链表不支持 [下标]可以实现但是代价是On不支持 迭代器-数字的原因只能用循环的方式找到目标位置,再调用insert函数的方式实现运行成功输入某值若存在删除它二、了解源码先看list源码 源码中节点叫_list_node1双向链表的节点的指针为什么要用void*去typedef?.2.链表难度就在迭代器 如下图官方源码3.核心成员变量 链表节点指针变量 nodelink_type node就是结点指针变量 link_type来源如下图4.链表的无参初始化即开始时申请一个哨兵位的头节点让这个哨兵位的头节点自己指向自己STL容器用的都是内存池后面讲。上图头节点不是new出来的而是调了一个get_node的函数(如下图红色线)即用内存池有点像malloc申请没有初始化的内存哨兵位头节点不需要初始化。当插入节点时调用的是下图函数create_node ,它有点像buy node。也是用内存池申请空间申请后用construct(相当于定位new在已经分配好的内存上操作)5.push_backinsert(end(), x)把新节点插入到哨兵节点的前面。end()返回哨兵节点迭代器不是最后一个有效元素。哨兵的前一个节点就是链表原来的最后一个节点等价于链表尾部新增节点。三、模拟实现先单独给节点设计一个类模板list_node里面有1.存放数据的T类型变量 2.T类型的list_node类模板指针变量 list_nodeT* _next _prev再先单独给节点设计一个类模板list将之前的类模板list_node重命名为Node,里面有类模板Node型的指针变量head 。我们这里不用内存池了用new就行了list 对象在栈上节点对象在堆上 new 出来。_head-_next _head含义哨兵节点内部的_next 指针存哨兵节点自己的堆地址不是栈上 list 容器 lt 对象。在没有虚函数、没有继承、访问权限不影响内存布局的前提下_head保存的是list_node整个对象的起始地址 对象第一个非静态成员的地址也就是说在创建这个对象时是按。两者意义不同可能会影响后续的使用方法对于普通类无虚函数、无继承成员变量在内存中的存储顺序 成员变量声明顺序初始化列表顺序。.是对象本身访问成员的运算符-是对象指针访问成员通过对象指针找到对象后访问成员的运算符。1.构造头节点 list()}2.push_back用一个指针变量tail保存头节点的prev指向的节点地址该指针变量指向最后一个节点相当于找到了最后一个节点地址3.两个模板增加成员size empty() 方便后续计算3.实现迭代器像测试上面已写的功能函数 只能用迭代器循环打印问题是怎么实现迭代器先看官方源码怎么解决如图为什么会有三个模板参数先不管源码中有这样一个类_list_node有核心成员node 如图也就是说这个类封装了一个节点指针变量源码中将解引用符* 自增运算符 重载了解引用符* 重载后功能改为 返回节点中存放的数据自增运算符 重载后功能改为 将当前节点内的next指针赋给他自己 也就是当前指针移动到了下一个节点。实现迭代器相当于返回一个指针迭代器是可以是原生指针也可以是自定义对象图纸类能干什么类 图纸不是根据图纸造出来的汽车对象图纸本身不能开但图纸1. 规定汽车对象实物身上有哪些零件成员变量2. 规定汽车对象实物具备哪些功能成员函数3. 定使用汽车守则访问规矩哪些对外可见哪些隐藏public/private注意我们用的是汽车通过使用汽车完成目的原本遍历链表要用节点指针但是节点指针不像string vector一样连续所以专门用一个迭代器类模板list_iterator封装重载运算符去搞定list迭代器的问题声明在第一个类后。这里建议前两个类用struck应为后面要大量应用两个类若他们用class用访问限定符限制一些变量还得加友元声明。类内有成员变量node,是Node型指针变量将前两个类重命名为 Node Self完成三个函数重载operator* operator 判断两个迭代器是否相等现在还需要补充 begin在迭代器类模板补充迭代器构造函数 end()下图补充构造函数继续完成begin 下两图都行完成end()测试报错因为模板类list_node没有写构造补上构造但又显示类模板list_node没有合适的默认构造分析法一法二若T()是自定义类型则调该自定义类型的默认构造推荐用法二运行成功在list模板类内再添加-- insert 功能函数完成insert后尾插push_back将原来注释如下左图 头插 push_front就可以直接复用它了添加erase功能函数尾删 pop_back 头删pop_front

相关新闻

2026/8/19 23:46:40

汽车市场数据分析:从乘联会与中汽协数据看懂市场真实冷暖

1. 从数据表象到市场肌理:一次从业者的深度拆解 最近,汽车圈里讨论得挺热闹,因为两份关键数据报告出来了,不少媒体和同行都在说“市场回暖了”。作为一个在汽车行业摸爬滚打了十几年的老兵,看到这些标题,我…

2026/8/19 23:46:40

基于ESP32的智能锅炉温控器DIY:从PID算法到Home Assistant联动

1. 项目缘起:一个被忽视的“黑盒子” 如果你家里用的是燃气壁挂炉或者集中供暖系统,那么你大概率见过它——一个挂在墙上、通常不怎么起眼、上面有几个按钮和一个小屏幕的白色塑料盒子。这就是中央供暖锅炉的控制盒,或者叫温控器。在很长一段…

2026/8/19 23:46:40

Dsh EAC v2.2:极简模式与插件市场重塑命令行开发体验

如果你是一名开发者,尤其是经常与服务器、命令行打交道的运维或后端工程师,你大概率经历过这样的场景:面对一个复杂的部署任务,你需要反复查阅文档,手动拼接一长串命令,或者在不同项目的脚本之间来回切换。…

2026/8/20 1:01:44

从零实现一个简单的OCR识别工具:Python + Tesseract深度实践

就在上个月的时候, 有一位客户找上了我, 寻求我的帮助, 他们财务部门每日都得处理数量多达上百张的发票, 单单手工录入那些信息, 便占用了数量极为可观的时间。我耗费了长达一周的时间, 运用某种工具搭建了一个具备自动化识别功能的工具, 该工具的准确率能够达到超过85%的水平,…

2026/8/20 1:01:44

干货!解密阿里云RPA (机器人流程自动化)产品架构和商业化发展

由阿里云历经8年自主研发的阿里云RPA, 在资本热烈追捧的情形之下, 正慢慢经由幕后走向台前, 进而成为企业服务市场中的一匹黑马。本篇文章会完全从产品方面展开剖析, 剖析阿里云RPA这款产品当前所处的阶段状况, 并且简要讲述一下阿里云RPA商业方面的进程。阿里云RPA是什么&…

2026/8/20 1:01:44

能快速抓住审稿人注意力的三个AI技巧,审稿人想拒都难!

各位同仁好,我是七哥。一个在高校里从事人工智能 相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。 被拒的论文,多数情况下不是输在研究本身,而是输在让人看懂你在做…

2026/8/20 1:01:44

AMAT 0190-A5841 双离子泵控制器

AMAT 0190-A5841 双离子泵控制器产品简介:产品特点:双通道独立控制,可同时运行两台离子泵。输出电压可调,范围2000至7000 VDC。短路电流最高50mA,可设定限制。支持以太网、USB、RS-232/422/485通信。配备LCD显示屏&…

2026/8/20 0:56:44

嵌入式开发入门:从LED闪烁项目掌握GPIO控制与开发环境搭建

1. 项目概述:从“Hello, World!”到硬件世界的敲门砖如果你刚拿到一块Arduino、ESP32或者STM32开发板,看着上面那个小小的LED灯,心里琢磨着“我该怎么让它听我指挥?”,那么恭喜你,你找对地方了。让LED灯闪烁…

2026/8/19 4:14:28

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/19 15:09:57

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/20 0:01:41

Cline、Hermes、OpenClaw 都能连:HTTP 型 MCP 客户端全适配

后台被问得最多的一类问题是:“我用的是 Cline / Hermes / OpenClaw,能连察元的 WPS 文档服务吗?” 统一回答:能。而且这个"都能连"值得单独写一篇——不是我们挨个给每个客户端做了适配,而是所有这些客户端…

2026/8/20 0:01:41

46 个文档工具一次看懂:察元AI文档助手 MCP 工具目录速览

把察元AI文档助手接进 Claude Code 之后,我建议的第一件事不是急着下提示词,而是把它的 MCP 工具目录过一遍——46 个工具(MCP 目录版本 0.10.0),乍看吓人,其实按"一份文档的生命周期"分组之后非…

2026/8/18 18:23:10

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/19 4:14:38

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/19 16:39:34

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…