- 博客(50)
- 收藏
- 关注
原创 Linux 压缩传输、进程查看与权限管理
掌握文件操作后,还需要解决资料怎样传输、程序怎样查看、操作为何被拒绝等问题。本文介绍常用压缩与传输命令、进程查看方法,以及用户身份、文件权限和目录权限。通过可复现的实验说明权限判断、权限修改与默认权限的关系,重点区分读取内容、修改内容和删除文件所依赖的条件,帮助建立可靠的操作习惯。
2026-10-25 13:26:04
527
1
原创 Linux 基础指令与文件操作
Linux 命令的学习,关键在于理解操作对象和执行结果。本文围绕云服务器上的文件操作,介绍路径、目录列表、文件属性、创建与整理、文本查看、查找筛选,以及重定向和管道。说明常用选项的作用与组合方式,辨清容易混淆的行为,为后续学习文件权限打下基础。
2026-10-24 10:32:33
554
2
原创 C++11 完美转发、可变参数模板与可调用对象封装
右值引用让类能够接管资源,但参数经过一层函数后,具名表达式就又成了左值。本文沿参数传递过程解释转发引用、引用折叠、forward 和参数包,再用构造说明 emplace 如何就地创建元素,最后介绍 function 与 bind 怎样保存和适配可调用对象。
2026-10-22 13:49:47
790
2
原创 C++11 右值引用与移动语义:对象如何转移资源
左值引用已经能够减少传参时的复制,C++11 为什么还要引入右值引用?本文从表达式分类和引用绑定出发,用动态数组管理类解释移动构造、移动赋值与资源所有权,再说明 move、默认成员函数和返回值优化的关系,区分语言规则、类自身约定与编译器观察结果,避免把移动理解为自动清空。
2026-10-21 14:25:29
730
2
原创 C++11 —— 列表初始化、类型推导与 lambda 表达式
C++11 的许多写法已经出现在容器示例中,但能照着使用,并不意味着清楚它们的选择规则。本文结合对象初始化、商品排序与筛选,解释花括号、initializer_list、auto、decltype 和 lambda,说明构造选择、类型与引用的差别,以及捕获对象的生命周期。
2026-10-20 14:43:43
747
1
原创 C++ unordered_map 与 unordered_set:查找、去重与哈希表封装
了解完哈希表后,再看无序关联容器,重点就从冲突处理转向接口怎样使用、规则为何如此。本文通过去重、字典和计数示例说明插入、查询与删除,讲清键的修改限制、容量规划、迭代器失效,以及哈希与相等判断的配合,再将同一张哈希表封装为集合和映射,理解键提取、跨桶遍历与下标访问之间的联系。
2026-10-19 10:57:16
820
原创 哈希表——快速找到数据:冲突、删除与扩容的实现
哈希表把键转换为查找位置,但一次计算并不意味着总能直接找到数据。本文从数组定址出发,逐步说明哈希函数、冲突与负载因子,再用线性探测和链地址法实现插入、查找、删除与扩容,重点解释删除标记、墓碑清理和结点重新映射。
2026-10-18 14:12:49
782
1
原创 C++ map 与 set:从有序集合到键值映射,再看红黑树封装
map 和 set 适合按键查找数据,却不能简单当成可以自动排序的数组。本文从去重和字典查询出发,逐步讲清比较规则、插入结果、范围查找、键的只读性与迭代器边界,再结合红黑树封装说明两种容器如何共用底层结构。
2026-10-17 15:18:14
910
1
原创 C++ 模板如何复用代码:从类型推导到特化与分离编译
当交换、存储和比较的步骤相同,只是类型不同时,模板能把重复代码交给编译器处理。本文从函数重载出发,解释函数模板、类型推导、类模板和非类型参数,再通过指针比较理解全特化、偏特化及选择歧义,最后分析模板定义为何通常放在头文件中。
2026-10-16 11:29:23
939
3
原创 红黑树——颜色规则及平衡变色(含详细图解及动图演示)
红黑树仍然按二叉搜索树的大小关系保存数据,却通过节点颜色限制路径长度。本文将从规则出发,解释空叶子、黑色高度与旋转过程,逐步分析插入时的连续红色冲突。结合小树和较大树的动图,完整展示红叔叔变色、四种旋转、子树转接及向上修复,从而加深对红黑树的底层理解。
2026-10-14 14:37:33
939
5
原创 AVL树如何保持平衡?一步步看懂四种旋转与C++实现(含详细图解与动图演示)
二叉搜索树能利用大小关系缩小查找范围,却可能因插入顺序退化成链表。本文从子树高度和平衡因子出发,解释插入后为什么有时停止更新、有时必须旋转,并通过完整分步图与动图拆解四种旋转的指针转接、上层连接和高度变化。结合较大树的真实插入场景,逐步推导并展示双旋的三个平衡因子分支。
2026-10-12 15:34:59
1022
3
原创 从查找路径到节点删除,彻底理解 C++ 二叉搜索树
普通二叉搜索树把有序关系组织在节点与子树之间,让查找沿着一条路径缩小范围。本文从有序数组的查找引入,逐步解释搜索树的全局规则、插入位置、中序遍历和三类删除情况,重点追踪父节点与后继节点的指针变化,并通过字典与词频统计说明键值树的用途,并讨论其树高和退化导致的复杂度变化。
2026-10-12 13:18:57
783
6
原创 C++ 多态:同一个基类接口,调用不同的函数
同一个基类接口接收不同对象,为什么能执行不同的函数?本文从买票场景出发,逐步理解虚函数、重写与动态绑定,分清静态类型和动态类型的作用,再解释默认实参、对象切片、虚析构、抽象类与虚表,追踪构造和析构期间的调用变化。通过各种可运行的代码示例,建立准确的判断方法,并基本学会设计简单的多态接口。
2026-10-10 19:09:40
1102
3
原创 C++ 继承:从复用共同成员开始到彻底理解派生类对象
继承不仅是把共同成员放进一个基类,更会改变对象的组成、成员访问和复制方式。本文学生类与老师类出发,逐步解释三种继承、基类子对象、向上转换、对象切片、同名隐藏,以及构造、拷贝、赋值和析构的执行过程,再通过菱形继承理解虚继承,最后讨论继承与组合的选择。
2026-10-09 13:11:46
1002
3
原创 stack、queue 与 priority_queue(优先级队列):从底层访问规则理解容器适配器
学过string、vector与list后,再看栈和队列,重点就不再是新分配内存,而是理解访问规则如何通过容器适配器落实。本文从后进先出、先进先出和优先级取出出发,串联标准库接口、底层容器选择、deque 的分段存储、仿函数与堆调整等内容,助于我们能够根据具体需求来选择更加合适的容器。
2026-10-07 19:27:21
1015
1
原创 list:迭代器与资源管理实现的综合叙述(下)
list模拟实现最值得深入理解的是迭代器:一个节点指针是怎样通过运算符重载表现为可遍历的位置,又怎样借助三个模板参数同时支持可写与只读访问的。
2026-10-06 14:44:00
1281
1
原创 list 的使用:把节点、位置和操作联系起来的综合叙述(上)
学会 list 不能只记住头插、尾插和删除函数,还要理解元素所在的节点、迭代器表示的位置,以及操作后哪些位置仍然有效。本文从熟悉的链表出发,结合基础测试逐步讲清构造、访问、遍历、增删与排序去重与节点转移,从而形成可靠的使用习惯。
2026-10-05 19:46:04
1112
1
原创 vector 的模拟实现:扩容与边界的详细阐述(下)
理解vector的实现,不是背下一份源码,而是把容量、元素搬移和资源所有权串起来。本文以三指针框架为线索,逐步分析扩容、插入删除、复制和赋值,并说明字节复制为何不能代替对象复制,最后分清简化实现与标准库之间的边界。
2026-10-05 16:46:42
1108
1
原创 vector 的基本使用(大小、容量和位置)的详细阐述(上)
从C数组过渡到vector,真正需要改变的不是下标写法,而是对元素数量、预留容量和位置有效性的理解。本文沿用基础测试,逐步讲清构造、访问、遍历、增删查改和二维数据,并用图表说明扩容与迭代器失效,把接口记忆变成可靠的使用习惯。
2026-10-04 12:07:27
1043
1
原创 学会使用 std::string 类,并理解其内部是如何管理字符串的详细阐述(下)
从 C 字符数组走向 C++ 的 string ,关键不只是少写几个字符串函数,而是理解字符、长度、容量和资源所有权怎样协同工作。本篇先用简单示例讲清构造、输入、遍历、修改、查找和C接口衔接,再通过简化实现串起扩容、深拷贝与拷贝交换,配合着练习,帮助我们深度理解其底层基本实现原理,形成可验证的习惯
2026-10-03 11:09:46
991
2
原创 学会使用std::string类,并理解其内部是如何管理字符串的详细阐述(上)
从 C 字符数组走向 C++ 的 string ,关键不只是少写几个字符串函数,而是理解字符、长度、容量和资源所有权怎样协同工作。本篇先用简单示例讲清构造、输入、遍历、修改、查找和C接口衔接,再通过简化实现串起扩容、深拷贝与拷贝交换,配合着练习,帮助我们深度理解其底层基本实现原理,形成可验证的习惯
2026-10-02 11:07:31
920
2
原创 从 malloc/free 到 new/delete:真正理解 C++ 中的内存管理与对象生命周期
本篇从 C 的内存分区与动态分配出发,用“存储空间”和“对象生命周期”两条线索理解 C++ 内存管理。通过内置类型和简单类,简单理解清楚 new、delete、数组形式与 operator new 的职责,以及构造、析构和释放的顺序。
2026-09-29 19:27:22
1207
1
原创 把C++类包装成真正可用的对象:运算符重载、const、静态成员
类能正确构造、析构和拷贝后,还要自然参与表达式。本篇从日期比较、加减和自增出发,解释运算符重载、成员与非成员函数、前置与后置 ++,再串联 const、静态成员、友元、类型转换与 explicit 的概念与使用。
2026-09-27 15:59:08
1312
1
原创 C++对象的出生与消失:搞懂构造函数、析构函数、初始化列表与拷贝构造
对象不是定义后再随意填数据的内存空间,而应从诞生起处于可用状态。本篇沿着生命周期讲清构造函数、初始化列表、成员对象顺序、析构函数、拷贝构造和赋值运算符。通过 const和引用,说明初始化列表为何必要、浅拷贝为何会重复释放,并用流程和表格区分新对象初始化与已有对象赋值。
2026-09-27 11:07:38
1123
1
原创 从结构体到对象:正式学习C++类的骨架、封装与this指针
本文从 C 结构体和函数出发,建立 C++ 类与对象模型,从而加深理解成员变量、成员函数、访问限定符、对象大小和 this 指针解决的问题。
2026-09-26 15:29:47
1018
原创 从C语言走进C++:先基本看懂命名空间、输入输出、重载与引用
面向基本学习C语言后,进而迈入C++学习的读者,本文从一个可运行程序出发,解释命名空间、iostream 输入输出、默认参数、函数重载、引用、inline 和 nullptr。说明这些语法为什么出现、如何运行,以及与 C 写法的对应关系,并用练习巩固指针、生命周期和调用歧义等边界
2026-09-22 20:21:47
1113
原创 常见排序算法(下):快速、归并与计数排序
上篇从局部有序、选择极值和相邻交换认识了基础排序,本篇继续进入分治与非比较思路。文章用完整过程图拆解快速排序的枢轴选择、三种分区、递归和显式栈,解释递归与非递归归并的拆合边界,再从映射、值域、空间和稳定性讲透计数排序。
2026-09-20 15:46:43
1131
1
原创 常见排序算法(上):选择排序、直接插入、希尔排序 (冒泡,堆)
排序不只是把数字从小到大排列,更是在时间、空间、稳定性和数据特征之间做选择。本文从排序的基本概念与公平测试方法出发,依次拆解直接插入、希尔、选择、堆和冒泡排序;通过逐步图解、动画、关键 C 代码与性能实验,说明元素如何移动、算法为什么正确,以及初学者最容易写错的边界。
2026-09-20 14:05:28
1011
1
原创 二叉树链式结构的实现:真正理解递归遍历与创建
上一篇借助堆认识了完全二叉树的层序数组。本篇转向更灵活的链式二叉树,补充度、叶子和高度等性质;以同一棵树逐步演示前序、中序、后序遍历,以及递归统计节点、叶子和第 k 层节点的过程;最后解析 `#` 空节点前序建树、销毁和两道 LeetCode 递归题,为后续学习二叉树的更多操作打下基础。
2026-09-17 15:20:56
1224
1
原创 从树的层次关系到堆的调整算法:二叉树开篇
树用于表达文件目录等层次关系。本文解释节点、根、父子、叶子、度、深度和高度,梳理二叉树的形态、性质与存储。随后说明堆的逻辑树与连续数组,演示向上调整、向下调整、建堆和堆排序,并补充复杂度、TOP-K、易错点和练习。
2026-09-14 23:30:45
1305
1
原创 队列:排队规则、先进先出
队列的重点不只是“先进先出”,还在于如何让队头删除和队尾添加都保持高效。本文先用现实排队建立 FIFO 模型,再拆解链队列中节点、front、rear、size 的职责,结合C语言推演入队、出队和最后一个节点的边界处理。
2026-09-13 12:11:24
1184
原创 栈为何“后进先出”:从访问顺序理解 C 语言动态顺序栈
栈不是“只能存几个数的数组”,而是一种限制访问方向的数据结构。本文先从撤销操作和函数调用理解后进先出,再用内存示意图建立栈顶、栈底、元素数量与容量的模型,最后对照动态顺序栈代码推演初始化、扩容、入栈、出栈和销毁,并通过复杂度分析与练习巩固边界处理。
2026-09-12 17:54:19
1123
原创 带哨兵的双向循环链表:双向连接、循环与统一边界
双向循环链表让节点同时保存前驱和后继,既能向前也能向后遍历;再加入一个不存用户数据的哨兵节点,就能把空表、首节点和尾节点统一为相同的局部连接关系。本章从单链表的限制推导普通双向链表、循环和哨兵的必要性,给出 C 语言初始化、插入、删除、查找、销毁的实现,并比较它与顺序表、单链表的适用场景。
2026-09-10 23:17:16
1116
1
原创 单链表:节点、指针连接与基本操作
单链表用节点保存数据,并用 next 指针表达元素的前后关系。节点不必连续,因此在已知位置附近插入或删除时不需要搬移整段数据;代价是不能按下标直接跳转,查找和定位通常需要逐个遍历。
2026-09-09 15:45:16
1860
1
原创 顺序表:线性表的连续存储、动态扩容与基本操作
顺序表是线性表最直接的实现:把逻辑上相邻的元素放进一段连续内存,因此可以按下标快速访问;代价是中间插入和删除必须移动元素。本章从线性表关系出发,比较静态与动态顺序表,推导扩容、插入、删除和查找的 C 实现,并说明每个操作的复杂度、位置约定与常见边界错误。
2026-09-08 23:29:25
1117
1
原创 从“能运行”到“跑得稳”:用C语言读懂数据结构复杂度
复杂度关注的不是某台电脑跑了几秒,而是输入规模变大时,算法需要增加多少操作和额外内存。本文从数组求和出发,用 Big O 理解 `O(1)`、`O(log n)`、`O(n)`、`O(n²)` 等趋势,结合 C 代码分析循环、二分查找、递归、栈空间和数据结构操作,并通过练习避开常数、步长和嵌套关系的误区。
2026-09-07 23:18:46
1396
原创 C语言控制台贪吃蛇游戏(下)
本文继续分析这款 C 语言控制台贪吃蛇如何在主循环中轮询按键、控制速度和暂停,并把一次移动拆成“计算下一格、判断食物、头插节点、删除尾巴、检查碰撞”。
2026-09-06 15:17:23
1516
1
原创 C语言控制台贪吃蛇游戏(上)
从一个真实的 C 语言控制台贪吃蛇项目出发,本文先建立“字符坐标画面”的思维模型,再用源码讲解 Win32 控制台常用接口、宽字符和本地化、蛇身单链表、地图边界、初始化及随机食物生成。
2026-09-05 23:12:57
1073
1
原创 C语言编译与链接介绍:从源文件到可执行程序的完整过程
从 hello.c 到可执行程序,中间经历了哪些步骤?本文按预处理、编译、汇编、链接和运行的顺序,解释每个阶段的输入、输出与职责,并用 gcc 命令、短代码和典型报错展示如何定位问题。
2026-09-01 10:38:14
1659
1
原创 C语言基本文件操作
程序一结束,普通变量就会消失;文件却能把数据保存下来。本文从文件指针和 fopen、fclose 讲起,按“打开—顺序读写—随机定位—判断结束—刷新缓冲区”的顺序,逐个介绍 fgetc、fputs、fprint、fwrite、fseek等常用函数。每个函数都有短小示例、预期结果和失败处理,并穿插文本/二进制选择、EOF 误用、容量检查等容易踩的坑。
2026-08-31 12:33:03
1313
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅