自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(87)
  • 收藏
  • 关注

原创 【Linux操作系统】进程篇(十一):进程程序替换——从底层原理到 exec 函数族

本文深入解析了Linux中exec函数族的作用与原理。通过结合进程地址空间、页表和PCB等知识,阐明exec不创建新进程,而是替换当前进程的程序映像,保留原PID与进程身份。其核心是:用新程序覆盖原进程的代码、数据和地址空间映射,从新程序入口开始执行。由于exec会改变进程内容但不改变进程身份,因此常与fork()配合使用——父进程fork出子进程后,由子进程调用exec执行新程序,而父进程可继续运行或等待回收,实现“子进程执行新程序,父进程不受影响”。这一机制在Shell命令执行中尤为典型,如输入ls时,

2026-11-06 16:20:39 487 2

原创 【Linux 底层原理】进程(十):进程等待详解---从僵尸进程到 wait、waitpid 与 status

子进程退出后,父进程需通过 wait 或 waitpid 回收其资源并获取退出状态,否则会形成僵尸进程。僵尸进程虽已结束,仍占用内核资源,无法被 kill -9 终止。wait 阻塞等待任意子进程结束,而 waitpid 可指定目标进程并支持非阻塞检查。退出状态 status 为位字段,需用宏解析正常退出码或信号编号。正确使用等待机制,是避免资源泄漏、确保程序健壮性的关键。

2026-11-04 20:13:13 626 2

原创 【Linux学习笔记】进程篇(九):进程的创建与退出——fork、写时拷贝与退出码

本文介绍了Linux中进程创建与退出的核心机制。通过fork()系统调用,父进程可创建子进程,二者共享代码但拥有独立的虚拟地址空间。关键在于“写时拷贝”(COW)技术:父子进程初始共享物理内存,仅在一方尝试修改数据时才进行内存复制,有效提升创建效率并节省内存。同时,fork()返回值区分父子进程(子进程返回0,父进程返回子进程PID),实现流程控制。最后,进程退出时通过exit()传递状态码给父进程,完成资源回收与结果传递。

2026-11-04 17:11:50 249 1

原创 【Linux底层原理】进程(八)从虚拟地址到物理内存,彻底搞懂进程地址空间

本文深入探讨了进程虚拟地址空间的概念及其在操作系统中的核心作用。通过分析程序地址布局,指出程序中的地址为虚拟地址,而非物理内存直接映射。引入虚拟地址空间机制,解决进程间内存隔离、地址冲突、内存碎片等问题。强调虚拟地址空间是操作系统对内存的抽象管理,依赖页表实现虚拟与物理地址转换,并支持按需调页、共享内存等高级特性。最终揭示:虚拟地址空间是连接程序、进程、物理内存与页表的关键纽带,是现代操作系统内存管理的核心基础。

2026-11-03 23:04:33 469 1

原创 【Linux操作系统】进程篇(七):环境变量:程序运行时的那些信息,到底从哪里来?

环境变量是程序运行时所需的环境信息集合,如PATH、HOME、USER等,影响命令查找与程序行为。通过echo $PATH可查看路径,export设置环境变量,env列出所有变量,unset删除。PATH决定系统在哪些目录搜索可执行文件,因此自编程序需加./或将其目录加入PATH才能直接运行。程序可通过getenv()、setenv()、unsetenv()操作环境变量,其数据以字符串数组形式存储于environ全局变量中,末尾以NULL标记结束。

2026-11-03 11:42:00 144 3

原创 【Linux操作系统】进程篇(六):进程上下文切换与 O(1) 调度算法

本文探讨进程上下文切换与调度算法的核心机制。当进程时间片用完或主动让出CPU时,操作系统需保存其寄存器状态(如PC、SP、通用寄存器等)及运行环境,形成“进程上下文”,并存入PCB中。切换至新进程时,再从其上下文中恢复现场,确保执行连续性。同时,为高效调度多个就绪进程,Linux采用O(1)调度算法,利用优先级数组、位图及活跃/过期队列实现快速选中高优先级进程,提升系统响应效率。

2026-11-02 15:38:58 279 3

原创 【Linux操作系统】进程篇(五):从浅入深讲懂进程优先级

本文系统梳理了Linux进程优先级的底层逻辑:从CPU稀缺引发的竞争与并发,引出时间片与进程调度需求,进而阐明优先级的本质是资源分配规则而非权限。通过“基准PRI + NI”的换算机制(PRI = 80 + NI),解释了nice值如何影响实际优先级,并揭示其-20至19的范围设计旨在防止进程饥饿、保障系统公平性。最终强调,理解优先级需超越命令记忆,把握“为何要优先级→如何实现→为何有限制”的完整逻辑链。

2026-11-02 10:47:34 386

原创 【Linux操作系统】进程(四):僵尸进程与孤儿进程

本文系统讲解了Linux中僵尸进程与孤儿进程的产生机制、危害及验证方法。僵尸进程因子进程退出后父进程未回收而残留,占用内核资源;孤儿进程则因父进程先于子进程退出,由1号进程(systemd)接管。通过模拟代码与ps命令可直观观察其状态变化。文章还补充说明内核通过SLUB等缓存机制高效管理task_struct等进程控制块,提升系统性能。

2026-11-02 10:46:29 176

原创 【Linux底层原理】进程篇(三):进程状态——从运行、阻塞到内核链表的动态变化

本文系统讲解了进程状态管理的核心机制。操作系统通过PCB管理进程,根据运行需求在新建、就绪、运行、阻塞、终止等状态间切换。Linux中进程状态包括R(可运行)、S/D(睡眠)、T(停止)、Z(僵尸)等,其中R状态涵盖运行与就绪。调度器基于运行队列(如FIFO思想)选择任务,而阻塞进程因等待I/O等事件进入睡眠,由等待队列管理。当事件触发,进程被唤醒但需重新调度。为缓解内存压力,系统还可将不活跃进程换出至交换分区,实现内存优化。

2026-11-01 19:32:02 289

原创 【Linux 底层原理】进程篇(二):从 task_struct 到 fork,彻底理解进程与父子关系

本文系统阐述了程序与进程的本质区别,指出进程是程序运行时的执行实体,由内核数据结构(如Linux中的task_struct)管理。操作系统通过描述进程的状态、资源和调度信息来实现对进程的创建、调度与回收。文章结合系统调用(如getpid()、getppid())和命令行工具(如ps axj),展示了如何在实际环境中观察和理解进程的运行状态,强调“先描述,再组织”的进程管理思想,帮助读者建立清晰的进程概念。

2026-10-27 09:14:22 316 2

原创 【Linux 底层原理】进程(一):从硬件、操作系统到系统调用,理解程序运行机制

本文从冯诺依曼体系结构出发,阐明程序运行的硬件基础:CPU、内存与外设协同工作。操作系统作为资源管理者,通过系统调用与库函数为应用程序提供统一接口,实现对进程、内存、设备的高效管理。核心思想是“先描述,再组织”——操作系统先抽象描述资源状态,再按规则调度与分配,保障多任务并发下的安全性与稳定性。理解这一哲学,是掌握进程管理与系统运作的关键。

2026-10-27 09:01:03 283 1

原创 【Linux 底层原理】工具篇 (三):gcc/g++ 编译工具、动静态库与编译原理

本文介绍了C/C++程序在Linux下从源代码到可执行文件的编译全过程,涵盖预处理、编译、汇编与链接四个阶段。通过gcc和g++的常用选项(如-E、-S、-c、-o),演示了各阶段的实现方式,并说明多文件项目分步编译的优势。同时,初步解析了静态与动态链接机制,帮助理解程序运行背后的链接原理。

2026-10-27 08:35:33 194 1

原创 【Linux底层原理】 工具篇(二):Vim 编辑器基础操作与简单配置

Vim 是 Linux 下高效文本编辑器,核心在于三种模式:正常模式(操作)、插入模式(输入)、末行模式(保存退出)。掌握模式切换(如 i 进入插入,Esc 返回,: 进入末行)是基础。常用命令包括光标移动(hjkl)、删除(x、dd)、复制粘贴(yy、p)、替换(r)、撤销(u)及跳转(15G)。末行模式支持保存(:w)、退出(:q!)、查找(/关键字)和显示行号(:set nu)。通过实践与配置文件 .vimrc 自定义语法高亮、缩进等,可提升使用效率。

2026-10-23 11:18:51 227

原创 【Linux 底层原理】工具篇(一):掌握 Ubuntu apt,让软件安装与管理更简单

本文介绍了 Ubuntu 系统中 APT 软件包管理工具的基本概念与常用命令。APT 作为 Debian 系发行版的高级软件包工具,可自动处理依赖关系,简化软件的安装、更新与卸载。通过 apt update 更新索引、apt search 检索软件、apt install 安装、apt upgrade 升级系统,并结合 remove、purge、autoremove 等命令实现高效管理。文章还对比了 APT 与 YUM/DNF 的差异,阐明其工作原理,强调合理使用命令以保障系统稳定。

2026-10-23 10:42:34 281

原创 【Linux】 权限篇(三):深入理解 umask 位运算与粘滞位的设计思想

Sticky Bit,中文通常称为“粘滞位”,是一种特殊权限位。在现代 Linux 中,它最常见的用途是保护设置了该权限的共享目录。当目录设置了粘滞位后,即使用户对目录拥有写权限,也不能因此随意删除或重命名其他用户的文件。文件的拥有者。目录的拥有者。超级用户 root。当然,操作仍然需要满足其他适用的权限与系统规则。错误。umask表示需要屏蔽的权限位。最终权限 = 请求的基础权限 & ~umask本篇学习了 Linux 权限管理中的两个重要机制。第一,umask。

2026-10-22 18:15:02 374

原创 【系统性学习笔记】Linux 权限篇(二):文件属性、权限修改与目录权限的底层逻辑

Linux 权限不是孤立的几个字母,而是一套用于管理访问行为的机制。本篇可以归纳为以下知识链:第一,使用ls -l观察文件类型、所有者、所属组和基本权限。第二,理解ugo三类访问者,以及rwx在普通文件和目录上的不同含义。第三,掌握chmod的字符形式与八进制数字形式,理解755644等权限组合的来源。第四,区分chmodchown和chgrp的职责:修改权限、修改所有者、修改所属组。第五,理解umask如何影响新建文件和目录的默认权限。

2026-10-22 14:01:41 381 2

原创 【算法思想进阶】双指针专题:从数组原地操作到多元素组合搜索

回顾这八道题,可以发现双指针的学习过程并不是记住越来越多的模板,而是逐步建立几种不同的推理能力。第一步:维护区域。移动零让我们学会用指针维护已处理区域;复写零进一步要求我们考虑逻辑输出边界和写入方向。第二步:追踪状态。快乐数说明,快慢指针不局限于数组下标,也可以用于确定性状态转移过程中的循环检测。第三步:利用单调性排除候选。盛水容器、有效三角形和两数之和都使用对撞指针,但每道题的移动规则必须由自己的数学性质推导,而不是照搬其他题的代码。第四步:逐步降低搜索维度。

2026-10-10 14:59:00 200 4

原创 【Linux 系统编程】权限(一):身份、提权,和那 9 个权限位

susu -sudo至于"权限"(chmod / chown / chgrp / umask)和"粘滞位",放到下一篇。

2026-09-20 19:51:45 430 4

原创 【Linux系统编程】 指令(四):查找、时间、打包和系统

【这一篇的四类命令】│ 找东西 │ │ 时间 │ │ 打包压缩 │ │ 系统状态 ││ find 翻磁盘 │ │ date 两套语言│ │ tar 打包为主 │ │ man 查手册 ││ which 翻PATH │ │ cal 日历 │ │ zip 一步到位 │ │ top 看负载 ││ whereis 翻固定│ │ 时间戳 唯一瞬间│ │ unzip │ │ uname 看版本 ││ grep 翻内容 │ │ 时区只在显示时 │ │ rzsz 拖文件 │ │ shutdown │。

2026-09-20 11:53:53 326 6

原创 【Linux系统编程】指令(三):创建、删除、复制、移动、看内容

【所有文件操作,只有两条线】│ 改「目录那张表」 │ │ 改「文件本体」 ││ (名字、位置、在不在) │ │ (数据块里的内容) ││ touch 加一行 │ │ echo > file ││ mkdir 加一行(目录) │ │ vim file ││ rm 删一行 ← unlink │ │ 程序里的 write ││ rmdir 删一行(仅限空目录) │ │ ││ mv 改一行 ← rename │ │ │▲ ▲│ │└──────── cp 两条都动 ─────────────┘。

2026-09-19 20:27:03 342 1

原创 【Linux系统编程】 指令(二):一条路径是怎么定位到文件的

【定位一个文件,靠的是四个概念】树(结构) 路径(描述) cwd(起点) 内核(执行)│ │ │ ││ 每个节点只有 │ 绝对:从 / 开始 │ 每个进程各一份 │ 一层层查名字│ 一个父节点 │ 相对:从 cwd 开始 │ 从父进程继承 │ 每层都查权限│ │ │ ││▼路径具有唯一性这部分读完,脑子里留下四个模型就够了:文件系统是一棵树,每个节点只有一个父节点,所以路径能唯一定位。和..是每个目录天生自带的两个目录项,也是树结构能成立的基础——它们能从ls -l的链接数那一列被验证。

2026-09-19 18:26:16 441 7

原创 【Linux系统编程】 指令(一):我敲下一条命令,到底发生了什么

这部分读完,脑子里留下四个模型就够了:shell 不是内核。它是用户态的一个程序,负责「翻译 + 起程序 + 接管子」。"一切皆文件"是接口统一。设备、管道、终端都能用 open / read / write / close,所以"终端"就是/dev/pts/0这个字符设备文件。fd 是号码牌。0 / 1 / 2 是标准输入 / 输出 / 错误,由 shell 在程序启动前接好。重定向改的是 fd 的指向,不是程序的行为。程序自己毫不知情。下一篇。

2026-09-18 11:36:44 378 4

原创 【Linux系统编程】:从操作系统历史到用户管理

计算机从埃尼阿克走向平民化,摩尔定律推动算力飞跃。1991年林纳斯·托瓦兹开源Linux,凭借透明与协作优势,现主宰服务器与安卓。企业青睐其可定制、无后门特性。学习推荐使用云服务器+Xshell,通过Ubuntu或CentOS搭建环境。核心操作包括:root用户掌控全局,adduser创建用户,userdel -r彻底删除,whoami与users查身份。一句话总结:算力普惠催生开源生态,用户管理与远程连接是入门基石。

2026-09-18 10:12:53 172 4

原创 C++笔记---每日一题系列(1)

题目要求从N块巧克力中切出至少K块大小相同的正方形巧克力,并且希望正方形的。假设我们现在尝试一个边长mid,那么对于一块长为H、宽为W的巧克力,可以切出的mid × mid例如一块6 × 5的巧克力,如果要求切成边长为2所以这一块巧克力可以切出6块2 × 2的正方形。将所有巧克力能够切出的数量加起来,就可以得到边长为mid时总共能够切出的正方形数量,这个变量就是代码中的con。

2026-08-18 19:02:33 202

原创 C++11 新特性详解(一):列表初始化、initializer_list 与右值引用

C++11 是 C++ 发展历史上非常重要的一次标准更新。它并不是简单地增加几个语法,而是对C++ 的对象管理、泛型编程、STL、函数对象等多个方面进行了系统性的增强。C++11 在 2011 年正式被 ISO 采纳,在 C++98 到 C++11 之间经历了较长的标准空窗期,因此它也是现代 C++ 的一个重要分界点。本文按照 C++11 的知识脉络,从最容易理解的列表初始化开始,逐步进入 C++11 最重要的核心内容之一——右值引用和移动语义。学习这一部分时不要急着背语法,尤其是右值引用、

2026-08-12 15:44:19 382

原创 C++11(三)———AI对话学习笔记(自用)

OLambda 最大的意义:减少“样板代码”[] 什么都不捕捉[x] x 按值捕捉[&x] x 按引用捕捉[=] 默认全部按值捕捉[&] 默认全部按引用捕捉[=, &x] 默认值捕捉,但 x 引用捕捉[&, x] 默认引用捕捉,但 x 值捕捉OLambda 最大的意义:减少“样板代码”比如为了实现一个简单比较:所以 Lambda 的核心价值不是:“我比仿函数更强。

2026-08-12 14:39:04 236

原创 c++11---AI对话学习复习笔记(自用)

在C++11之前,函数重载是一件让人头疼的事——想要同时接收左值和右值,往往需要写两个版本。就像一个专门用来装右值的容器,容器的名字本身是有地址的、实实在在的左值。某些场景下,可以避免“先产生临时对象,再移动/拷贝进去”这个过程,直接在目标位置构造对象。这一节会非常贴近你之前实现 vector/list 的代码,所以会很好理解。// 无论x是什么类型,这里永远传的是左值!这是C++新手最容易踩的坑,也是理解完美转发的关键。你前面学移动构造的时候,其实就是为这里铺垫的。好,我们继续按照课件往下走 👍。

2026-08-11 18:42:21 171

原创 C++11(一)复习自用版本

让容器的初始化和数组一样自然、简洁、统一。对象有资源↓拷贝很慢↓发现临时对象马上销毁↓移动语义↓移动构造/移动赋值↓STL(vector/string)性能提升移动语义就是让 C++ 在确定对象即将销毁时,不再复制资源,而是转移资源所有权。

2026-08-09 19:50:49 203

原创 C++哈希表(一)---AI对话学习记录(基础复习自用)

key1 → 5key2 → 5不同 key 得到了相同下标。哈希是什么↓哈希函数↓哈希冲突↓线性探测↓Insert↓Find↓Erase负载因子↓扩容↓Rehash↓为什么扩容后必须重新插入HashFunc模板模板特化这样你就不会被这份代码里一堆模板和 STL 细节带跑偏。而且我特别建议你现在先自己画一个只有 7~8 个格子的哈希表,手动模拟的插入、冲突和删除。这一步一旦自己推一遍,基本就真的通了。🧠你如果愿意,我们下一步就可以。

2026-08-08 21:43:59 181

原创 并查集(Union-Find)全面复习:从原理到 LeetCode 应用

维度说明核心思想用一个一维数组隐式表示"多棵树组成的森林",每棵树代表一个集合,树根就是集合的代表元素编码规则下标 = 元素编号;值为负数 = 根节点,绝对值 = 集合元素个数;值为非负数 = 该元素的双亲下标核心操作FindRoot(查根)、Union(合并两个集合)、Count(统计集合个数)适用场景分组问题、连通性问题(省份数量、朋友圈)、等价关系/矛盾检测(等式方程可满足性)、最小生成树(Kruskal 算法)、图的连通分量判定等可优化方向路径压缩(FindRoot。

2026-08-08 11:25:13 363 1

原创 C++ STL 之 set 详解:从底层红黑树到实际应用

set的插入接口很直观,支持单个元素插入、初始化列表插入、以及迭代器区间插入:对于单个元素的insert,由于set保证了键值唯一,第二次插入相同的值会被静默忽略。比如上面的代码中,2和8在初始化列表插入时已经存在于set中,所以实际插入的只有3和9。cpp// 去重 + 升序排序set<int> s;// 重复,插入失败while (it!// *it = 1;// 编译错误:不能给常量赋值++it;// 插入 initializer_list,已存在的值插入失败。

2026-08-02 14:40:03 352

原创 C++ 内存管理全面复习:从内存分布到 operator new/delete

/ new/delete 和 malloc/free 最大的区别:// new/delete 对于【自定义类型】除了开空间,还会调用构造函数和析构函数// 只开空间,不会调用构造函数// 开空间 + 调用构造函数free(p1);// 只释放空间,不会调用析构函数delete p2;// 调用析构函数 + 释放空间// 内置类型上,new/malloc 几乎是一样的// C 方式// C++ 方式。

2026-07-28 17:06:57 371

原创 C++ 模板全面复习:从函数模板到分离编译

class 类模板名// 类内成员定义以一个简易的Stackpublic:_size = 0;// 类模板成员函数在类外定义,类名后必须带上 <T>// 注意:一般不建议把类模板的声明和定义分离到 .h / .cpp 两个文件,// 否则会出现链接错误(原因见第五节"分离编译")// 这里省略了扩容逻辑++_size;一个项目由多个源文件组成,每个源文件各自单独编译成目标文件(.obj.o。

2026-07-28 10:10:35 468 6

原创 红黑树(Red-Black Tree)深度笔记 —— 从插入原理到代码调优

本文系统总结了红黑树的实现原理与细节。红黑树通过四条颜色规则(根黑、红不连续、黑高一致)实现近似平衡,最长路径不超过最短路径2倍,相比AVL树维护成本更低,适合写多读少场景。关键实现包括:新节点默认红色以局部化问题;插入后分三种情况处理(叔叔红则变色传播,黑则旋转);必须更新父指针和强制根节点黑。文中提供了完整代码实现,并指出易错点(如==误写为=、旋转遗漏父指针更新等),强调验证函数的重要性。最后对比了红黑树与AVL树的适用场景,指出红黑树通过维护可高效检查的不变量来间接保证性能,体现了"用可控

2026-07-22 19:58:45 333 10

原创 C++ 多态详解:从概念到虚表底层原理(代码轰炸)

多态├── 编译时多态:函数重载、函数模板(静态绑定)└── 运行时多态:虚函数 + 基类指针/引用(动态绑定)├── 构成条件│ ├── 基类的指针或引用调用│ └── 被调函数是虚函数且完成重写├── 虚函数重写细节│ ├── 三要素完全相同(返回值、函数名、参数)│ ├── 协变:返回值可以是基类→派生类指针/引用│ ├── 析构函数:基类析构必须加 virtual,防止资源泄漏│ ├── override:编译期检查是否真正构成重写。

2026-06-11 16:43:22 836 16

原创 从“为什么只有四种旋转”到理解AVL树的本质

双旋时并不是只有失衡节点参与旋转,而是需要先调整它的子树结构。学习AVL之后,我最大的收获并不是学会了四个旋转函数。从叶子向上更新平衡因子时,会不会出现多个节点失衡?双旋的本质并不是旋转两次,而是“先把折线拉直”。找到第一个平衡因子为 ±2 的节点。AVL插入只需要修复第一个失衡节点。第一次旋转甚至不是对失衡节点进行的。这是我学习过程中最大的疑惑之一。会出现多个节点平衡因子发生变化。旋转种类有限,不是人为规定的,这就是AVL全部的失衡类型。直线直接转,折线先拉直再转。AVL看起来有四种旋转。

2026-06-07 20:36:32 320 13

原创 C++ 继承详解(下):默认成员函数、虚继承底层与设计取舍

1. 派生类赋值运算符里忘加基类作用域和的区别是前者调用基类,后者在Student的作用域里找到的还是自己,无限递归,直接栈溢出。2. 析构函数自动调用的顺序析构顺序是先派生类再基类,不需要手动调用基类析构。如果手动调用了,基类会被析构两次,产生未定义行为。3. 虚继承中虚基类由最终派生类构造菱形虚继承里,中间层(Student、Teacher)构造函数里对 Person 的调用会被忽略,Person 只由最终派生类(Assistant)构造一次。

2026-05-28 20:15:00 529 6

原创 C++ 继承详解(上):从代码复用到切片与隐藏

class 派生类名 : 继承方式 基类名Person叫基类,也叫父类;Student叫派生类,也叫子类。两种叫法都对,是翻译来源不同导致的。// public 继承(最常用)// protected 继承// private 继承class关键字定义的类默认继承方式是privatestruct定义的类默认是public。实际写代码时建议显式写出继承方式,不要依赖默认值,可读性更好也不容易出错。派生类中的同名成员会屏蔽基类同名成员的直接访问,这种情况叫。

2026-05-27 20:15:00 375 6

原创 深入理解 C++ STL:stack 和 queue 的底层原理与实现

/ 仿函数:按 priority 降序(数字大的先出)// 注意:和 sort 的 cmp 语义一致的底层是堆(heap),默认用vector存数据,通过push_heappop_heap维护堆序。它和 stack/queue 一样是容器适配器,但底层容器是 vector 而不是 deque。stackqueue顺序LIFOFIFO按优先级默认底层dequedequevector(堆)可用底层top 操作O(1)O(1)O(1)push / popO(1)

2026-05-13 21:20:00 517 11

原创 从零实现 C++ List:带头循环双向链表的每一个细节

本文详细记录了从零手写C++ std::list容器的完整过程,包括底层双向链表设计、迭代器封装原理、const迭代器合并技巧等核心实现。文章通过16个章节系统讲解了list的节点结构、迭代器本质、深拷贝实现等关键技术点,特别剖析了链表与顺序表的本质差异。作者不仅提供了可直接运行的完整代码,还分享了实际开发中遇到的典型问题(如迭代器失效)及其解决方案。该实现适合学习C++数据结构的开发者参考,能帮助深入理解STL容器的设计思想和工作原理。

2026-05-09 20:45:00 580 3

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除