自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++】红与黑的边界:红黑树从插入到自检

本文系统讲解红黑树的原理与模拟实现,涵盖节点结构、插入操作及三种调整情形(变色、单旋+变色、双旋+变色),确保满足五条核心规则。通过自上而下调整,保障增删查时间复杂度稳定在O(logN)。文章还实现查找、判断是否为红黑树等功能,并通过性能测试验证其高效性,适合深入理解自平衡二叉搜索树的实现逻辑。

2026-10-25 23:31:22 27

原创 【C++】一次插入,四场旋转:C++ AVL 树的自平衡之路

本文系统讲解了AVL树的原理与模拟实现,涵盖节点结构、插入操作、平衡因子更新及四种旋转机制(右单旋、左单旋、左右双旋、右左双旋),确保树始终保持平衡。通过插入后自上而下的平衡因子调整与旋转,保障增删查效率稳定在O(logN)。文章还实现了查找、判断是否为AVL树等功能,并通过性能测试验证其高效性,适合深入理解自平衡二叉搜索树的实现逻辑。

2026-10-22 17:52:09 320

原创 【C++】map 与 set 的关联式容器实践

本文系统讲解C++ STL中set、multiset、map、multimap四种关联式容器的原理与使用。基于红黑树实现,具备自动排序与去重特性,支持高效插入、删除、查找(时间复杂度O(logN))。重点介绍其构造、迭代器、插入/删除/查找操作及operator[]的三大功能,并通过代码演示词频统计、数据去重等实际应用,帮助读者深入理解关联式容器在实际开发中的价值。

2026-10-18 22:43:02 215

原创 【C++】《手撕二叉搜索树:删除才是真正的分水岭》

本文系统讲解二叉搜索树的结构、性质及模拟实现,涵盖插入、查找、删除等核心操作,并区分key与key/value两种使用场景。通过代码演示,展示了其在词典翻译、车库管理、单词计数等实际应用中的价值,强调了二叉搜索树在高效数据检索中的重要性。

2026-10-15 20:21:16 471 12

原创 【C++】在编译期沉默,在运行期发声:多态的一生

本文系统讲解C++多态机制,涵盖虚函数、虚函数重写、多态的两个条件(基类指针/引用调用虚函数、派生类重写基类虚函数),并通过代码实例演示多态实现原理。深入剖析虚函数表(vtable)与虚函数表指针(vptr)的作用,阐明动态绑定与静态绑定的区别,强调析构函数设为虚函数的重要性以避免内存泄漏。同时介绍协变、纯虚函数、抽象类、override与final关键字等进阶特性,并结合汇编层面解析多态底层实现,帮助读者全面掌握运行时多态的核心机制。

2026-10-13 23:42:05 278 12

原创 【C++】从基类到派生类:关于C++继承的务实梳理

本文系统讲解C++继承机制,涵盖继承概念、访问控制变化、基类与派生类转换、默认成员函数处理、友元与静态成员特性,重点剖析多继承及菱形继承问题,并引入虚继承解决方案。强调继承与组合的对比:继承实现“is-a”关系,但耦合度高,破坏封装;组合实现“has-a”关系,耦合低,更推荐优先使用。结合代码实例,深入浅出地阐述继承在实际开发中的应用与注意事项,倡导合理设计以提升代码可维护性。

2026-10-11 21:53:06 342 10

原创 把值写进类型:C++ 模板进阶的非类型参数、特化与分离编译

本文深入讲解C++模板进阶内容,涵盖非类型模板参数(如size_t)、array容器的越界检查、函数与类模板特化(全特化、偏特化)、模板分离编译问题及函数模板的优缺点。强调模板在编译期实现类型安全与高性能,但存在代码膨胀、编译时间长、错误信息复杂等问题。通过实例解析模板的使用场景与注意事项,助力开发者掌握泛型编程核心技巧。

2026-10-08 23:23:22 568 9

原创 C++ 泛型世界的两块拼图:容器适配器与仿函数

本文系统讲解C++中stack与queue作为容器适配器的实现原理,对比vector与list在栈、队列模拟中的优劣,深入剖析deque(双端队列)的分段连续结构及其在头尾操作、随机访问上的性能优势。指出deque兼顾高效插入删除与缓存友好性,成为stack和queue的默认底层容器。同时介绍priority_queue的堆实现机制与仿函数的应用,展示其在解决TOP-K问题中的价值。通过仿函数实现自定义比较逻辑,提升代码灵活性与可复用性,全面揭示泛型编程的核心思想。

2026-10-05 18:27:03 510 8

原创 【C++】一条双向链的诞生:手写 list 模拟实现

本文详细解析了C++中std::list的底层原理与模拟实现,重点讲解其双向循环带头链表结构、迭代器封装机制及与vector的对比。文章通过代码实现展示了list的构造、插入、删除、遍历等核心操作,并深入分析了迭代器失效问题。结合测试用例验证了insert不导致失效而erase需更新迭代器的特性。最后指出list适用于频繁中间增删场景,但因内存离散导致缓存性能较差,适合非随机访问需求。

2026-10-03 16:12:24 550 4

原创 【C++】双向奔赴的链表:list 使用全指南

list容器是双向带头循环链表,节点在堆上分散存储,支持高效插入与删除,但不支持随机访问,空间开销较大。其迭代器为双向迭代器,无法使用需随机访问的算法(如sort)。list提供insert、erase、sort、reverse、merge、unique、splice等操作,其中merge可合并有序链表,unique需先排序以去重,splice实现链表间元素转移(剪切非复制),适用于元素重排与合并场景。

2026-10-03 15:47:13 251 2

原创 vector的模拟实现与迭代器失效

本文详细解析了C++ vector容器的模拟实现,涵盖构造函数(默认、拷贝、迭代器区间、填充)、析构函数、赋值重载、迭代器与容量操作、访问方法及迭代器失效问题。重点剖析了内存分配器机制、深浅拷贝陷阱及reserve缺陷,结合实例说明迭代器失效场景,并提供修复方案。代码实现遵循STL设计思想,支持泛型与自定义类型,完整项目见Gitee链接。

2026-09-19 15:25:03 132 1

原创 从数组到动态数组:掌握 vector 的增删遍历

在C++当中,vector是标准模板库(STL)中最核心,最常用的序列容器之一。他是一个可以动态改变大小的数组。使用时需要一个头文件 :#include <vector>template <class T>表示一个模版其中:class T是元素类型。T相当于占位符。表示希望存储在vector当中的类型class Alloc = allocator<T>:表示分配器类型。allocator是默认的分配器类型。他负责管理底层的内存分配,释放和对象的构造和析构。

2026-09-17 16:45:41 276 9

原创 【C++】String类的使用(含模拟实现)

内容是关于C++ string类的介绍、功能、模拟实现和编码等。摘要应简洁概括主要要点。本文系统介绍了C++标准库string类:自动内存管理、丰富操作、安全访问;涵盖构造函数、赋值重载、容量操作、迭代器遍历、扩容机制、插入删除查找替换等核心功能,并给出模拟实现代码及Unicode编码基础,是掌握动态字符串的实用指南。

2026-09-05 16:12:53 366

原创 【C++】C++ 核心进阶(一):泛型编程基石 —— 模板初阶与 STL 体系开篇

本文介绍C++泛型编程,涵盖函数模板(格式、实例化、匹配原则)、类模板(定义、使用、内存管理)、STL六大组件,并补充隐式类型转换(自动、强制、运算符重载及用户定义转换)。重点说明模板避免重复代码,类模板需显式实例化,及realloc不可用的原因。

2026-09-05 10:28:33 308

原创 C内容补充

本文总结了C语言多个易错知识点:负数取模符号由被除数决定;字符串比较不能用==;realloc缩容可能截断数据;printf占位符与参数对应;scanf对数值和字符串自动跳过空白,%c不跳过;变长数组VLA不可初始化、不能全局/静态且可能栈溢出;sizeof与strlen区别;函数实参多样;printf对齐格式;以及数组逆置、素数判断、轮转数组(额外数组/翻转法)、水仙花数和异或/加减交换变量等算法实现要点。

2026-07-18 23:20:39 242

原创 【Python基础】条件·循环·函数:Python编程的三大基石深度剖析

本文主要包括以下内容:1. 条件判断结构:详细讲解单分支、多分支和嵌套分支结构,以及三元表达式等简写方式;2. 循环结构:涵盖for循环和while循环的使用方法,包括break、continue语句和嵌套循环;3. 异常处理:介绍try-except结构、多异常处理、else和finally子句的使用场景;4. 函数定义与使用:包括普通函数、lambda表达式、递归函数、生成器函数和嵌套函数的特性及应用;5. 参数类型与调用:解析默认参数

2026-06-29 16:43:27 858 1

原创 【Python基础】数据类型及转化和运算符的使用

1,注释方式:单行(#)和多行(''' '''),2,多行语句:支持反斜杠\或括号换行,3,引号规则:三种引号定义字符串,需成对匹配,4,核心数据类型: 不可变类型:int/float/bool/str/tuple 可变类型:list/dict/set 5, 运算符:算术/比较/逻辑/成员运算符 6,内置函数:print()/input()/type()/len()等 7,类型转换:隐式(自动)与显式(强制)转换 特别强调:字符串不可修改,元组与列表的主要区别

2026-06-28 16:51:40 320

原创 【C++】new/delete 还是 malloc/free?C++内存管理的“世纪抉择

文章系统讲解了C/C++内存管理机制。首先分析了程序内存布局,包括栈、堆、静态区等区域的特性及变量存储位置。重点对比了C语言(malloc/free)和C++(new/delete)动态内存管理方式:new/delete会调用构造/析构函数且类型安全,而malloc/free需要手动计算大小和类型转换。文章详细剖析了new/delete的底层实现原理(通过operator new/delete调用malloc/free),并介绍了定位new表达式等高级用法。最后总结了两种方法的区别。

2026-06-23 17:17:01 430 1

原创 【C++】解构C++对象模型:你和高手之间,就差这篇类和对象-下

本文摘要: C++面向对象编程中的进阶特性包括六部分内容:1.类型转换(隐式转换、explicit禁用转换);2.static成员(共享变量、无this指针的静态函数);3.友元机制(突破封装限制的友元函数和友元类);4.内部类(嵌套类实现封装,默认友元关系);5.匿名对象(临时对象生命周期);6.编译器优化(减少拷贝构造的开销)。重点讲解了各类特性的语法规则、使用场景和注意事项,如静态成员需类外初始化、友元关系的单向性、匿名对象即时析构等,并通过代码示例演示了实际应用。这些特性共同增强了C++的封装性、灵

2026-06-21 10:35:50 494 2

原创 【C++】解构C++对象模型:你与“高手”之间,就差这篇类和对象-上

本文摘要: C++类与对象详解:从基础到高级特性 本文系统介绍了C++中类与对象的核心概念和实现细节。主要内容包括: 类的定义与访问控制 类成员变量和成员函数的声明方式 访问限定符(public/private/protected)的作用和使用规范 类作用域的概念和成员函数定义分离的方法 对象实例化与内存管理 实例化过程与内存分配原理 对象大小的计算规则(内存对齐) this指针的工作原理和作用域 六大默认成员函数 构造函数(含初始化列表) 析构函数 拷贝构造函数 赋值运算符重载 取地址运算符重载 cons

2026-06-18 22:35:31 578 1

原创 【C++】C++基础入门指南

本文系统介绍了C++核心语法特性:1)命名空间(namespace)的定义与使用,包括嵌套命名空间和域的概念;2)标准输入输出流(cin/cout)的使用方法;3)缺省参数的分类(全缺省/半缺省)和使用规则;4)函数重载的实现条件(参数类型/数量/顺序不同);5)引用的概念、特性及与指针的区别;6)内联函数(inline)的作用和适用场景;7)nullptr作为空指针的引入背景。通过代码示例展示了各特性的具体应用,并对比了C++与C语言在相关特性上的差异。

2026-05-21 21:00:03 441 2

原创 【数据结构】排序算法大全的保姆级攻略

本文系统介绍了常见的排序算法及其实现。主要内容包括:插入排序(直接插入和希尔排序)、选择排序、堆排序、冒泡排序、快速排序(递归和非递归实现)、归并排序(递归和非递归实现)以及计数排序。每种算法详细阐述了核心思想、代码实现、时间/空间复杂度分析,并比较了它们的优缺点。特别讨论了快速排序的优化方法(三数取中法和小区间优化)以及各种排序算法的稳定性问题。文章最后对所有排序算法进行了总结对比,指出直接插入排序、冒泡排序和归并排序是稳定的,而希尔排序、选择排序、堆排序和快速排序是不稳定的。

2026-05-10 10:40:37 599 5

原创 【数据结构】二叉树的遍历和节点个数

本文系统介绍了二叉树的基本操作与实现方法。主要内容包括:1. 二叉树的四种遍历方式(先序、中序、后序、层次遍历)及其递归实现;2. 计算二叉树节点数、叶子节点数、高度、第k层节点数等核心算法;3. 二叉树查找、销毁、层次遍历等操作的实现;4. 判断完全二叉树、单值二叉树、相同树、对称二叉树的方法;5. 多个经典二叉树问题的解决方案,包括子树判断、遍历实现等。文章通过详细的代码示例展示了二叉树各种操作的递归实现思路。

2026-04-21 21:41:08 511

原创 【数据结构】详解二叉树和堆

文章系统介绍了树形数据结构的基本概念和实现方法。首先阐述了树的定义及其相关术语(如度、叶节点、父节点等),重点讲解了二叉树的特性和两种存储方式(顺序存储和链式存储)。其次详细介绍了堆这一特殊二叉树结构,包括大堆和小堆的定义,并提供了堆的基本功能实现代码(初始化、插入、删除等)。最后探讨了堆排序算法和TOP-K问题的解决方案,分析了不同建堆方法的时间复杂度,并给出了具体实现代码。

2026-04-16 14:26:49 501

原创 函数栈帧的创建和销毁

本文深入解析了函数栈帧的工作原理。函数栈帧是函数调用时在栈区开辟的内存空间,用于存储局部变量、参数和返回地址等信息。通过分析汇编代码,文章详细展示了函数栈帧的创建和销毁过程:1)压入寄存器值;2)分配局部变量空间;3)参数传递(从右向左);4)函数调用时的返回地址保存;5)返回值通过寄存器带回。整个过程由esp和ebp寄存器维护,解释了局部变量初始化、参数传递机制等核心问题。理解函数栈帧对掌握程序底层执行机制具有重要意义。

2026-04-10 14:59:49 407

原创 【数据结构】详解栈和队列

本文主要介绍了栈和队列两种数据结构的基本概念、实现方法以及相关应用练习。栈是一种遵循先进后出原则的线性表,可以通过数组或链表实现,文中详细展示了用数组实现栈的代码示例。队列则是遵循先进先出原则的线性表,通常采用链表实现,文中提供了单链表实现队列的完整代码。本文还包含两个数据结构之间的转换练习:用队列实现栈和用栈实现队列,分别阐述了核心思路并提供了具体实现代码。最后还介绍了有效的括号判断和循环队列设计等典型应用场景的实现方法。

2026-04-03 20:57:37 561

原创 【数据结构】时间复杂度和空间复杂度

本文主要介绍了算法分析中的时间复杂度和空间复杂度概念及其计算方法。时间复杂度衡量算法执行所需时间,通过大O渐进表示法计算,常见类型有O(1)、O(N)、O(N²)等。空间复杂度衡量算法额外占用的内存空间,计算规则与时间复杂度类似,常见类型包括O(1)、O(N)等。文章还提供了计算实例和OJ练习题,如冒泡排序、阶乘递归等,帮助理解这两种复杂度的实际应用。另外补充了clock函数的使用。

2026-03-27 22:41:03 709

原创 【数据结构】详解双向链表

本文系统介绍了链表的相关知识,重点分析了双向链表的结构特点与实现方法。首先将链表分为8种类型,详细阐述了带头双向循环链表(双向链表)的结构特征,包括头节点设置、前后指针和循环特性。其次提供了双向链表的创建与功能实现代码。文章还比较了顺序表和双向链表的优缺点,并通过三个典型算法练习(判断环、寻找入环节点、复制随机链表)深入讲解了链表操作技巧,其中重点解析了快慢指针法在环形链表检测中的应用原理与实现方式。

2026-03-17 23:05:53 143

原创 【数据结构】详解单链表(含链表的实现过程)

本文摘要: 本文系统介绍了单链表的核心概念与应用。首先对比了顺序表和单链表的适用场景,指出顺序表适合频繁访问和固定内存需求,单链表适合频繁插入删除和数据量变化大的情况。随后详细讲解了单链表的实现方法,并提供了多个力扣经典例题的解决方案,包括移除链表元素、反转链表、链表中点检测、合并有序链表、环形链表约瑟夫问题、链表分割等。每个例题均配有解题思路和C语言代码实现,重点展示了快慢指针、哨兵节点等关键技巧的应用。文章还通过Gitee链接分享了完整代码实现,为学习和掌握单链表操作提供了实用参考。

2026-03-16 23:14:24 696

原创 【数据结构】顺序表的使用(含通讯录项目)

数据结构是计算机存储和组织数据的方式,包括数组等基础结构。顺序表是一种线性表的顺序存储结构,分为静态和动态两种。静态顺序表大小固定,易造成空间浪费或不足;动态顺序表可调整大小,更适合存储数据。通讯录项目基于顺序表实现,通过将元素改为结构体类型,支持联系人信息的增删查改等功能,以及如何将通讯录的信息传入到文件当中进行保存。项目代码包含头文件和源文件,展示了通讯录项目的完整实现过程。

2026-03-14 23:30:33 426

原创 函数补充与常见例题分析(杂例补充)

本文主要分析了atoi函数,isspace函数,isdigit函数的功能和使用。同时又补充了数组的相关例题和offsetof宏的使用,以及交换整数二进制的奇偶位的宏的实现

2026-03-09 17:18:35 362

原创 详解预处理

本文主要对预处理的各种功能进行了分析和总结:包括#define定义常量和#define定义宏的各种规则和用途,同时使用时的常见问题。然后对条件编译的多种形式的运用展开分析其功能,最后又对两种头文件的包含的方式,进行不同点的区分,提出了解决头文件被多次包含的方法。

2026-03-06 10:27:02 754

原创 编译和链接

本文系统阐述程序从源码到运行的全过程,涵盖翻译环境与运行环境。翻译环境包括预处理(宏替换、头文件展开、删除注释等)、编译(词法、语法、语义分析生成汇编代码)和链接(合并目标文件,解决符号引用),最终生成可执行程序。运行环境则由操作系统将程序载入内存,执行main函数,利用运行时堆栈管理局部变量与返回地址,直至程序终止。整个流程体现了程序从代码到执行的完整生命周期。

2026-03-05 09:00:24 404 1

原创 C语言--文件操作

本文系统介绍了C语言文件操作的相关知识。主要内容包括:1)文件分类(程序文件和数据文件)及存储方式(文本/二进制);2)文件操作流程(打开、读写、关闭)和流的概念;3)各类文件读写函数(fputc/fgetc、fputs/fgets等)的使用方法;4)随机读写操作(fseek/ftell/rewind);5)文件结束判定及缓冲区机制。文章通过具体实例详细说明了各种文件操作函数的语法、参数和返回值,帮助读者掌握C语言中文件处理的核心技术要点。

2026-03-03 21:12:39 600

原创 C语言--动态内存管理

本文主要讲C语言动态内存的开辟,如何使用malloc、calloc、realloc、free函数,同时讲解了在使用动态内存时会出现的常见错误。还有大量例题帮助深入理解动态内存的开辟,以及额外补充了柔性数组的相关知识。

2026-02-14 16:48:33 1459

原创 自定义类型——联合和枚举(简明分析)

本文介绍了联合体和枚举类型的特性及应用。联合体(共用体)成员共享内存空间,大小为最大成员所占内存的整数倍,能有效节省空间但成员间会相互影响。通过实例分析了联合体的内存分配、大小计算及实际应用场景(如存储商品属性、判断字节序)。枚举类型通过列举可能取值来定义常量,相比#define具有类型检查、可读性强、便于调试等优势。两种类型各具特点

2026-02-10 21:14:00 931

原创 C语言——结构体(深度解析 )

本文主要介绍了C语言中结构体的相关概念和应用。首先阐述了结构体的声明方式、自定义类型定义和变量初始化,重点讲解了结构体的嵌套和自引用实现。其次详细分析了结构体内存对齐规则及其原因(平台限制和性能优化),并给出修改默认对齐数的方法。然后探讨了结构体传参的最佳实践(建议传递地址)。最后介绍了位段的概念,说明其节省空间的特性,同时指出位段的跨平台问题和内存分配特点。文章通过具体示例展示了结构体和位段的使用方法,并分析了相关注意事项。

2026-02-09 21:24:40 1493

原创 C语言——数据在内存中的存储

C语言数据在内存中的存储规则,帮你分析C语言的底层原理,筑牢C语言内层知识。含有多种例子,帮助你快速并深入掌握C语言中抽象的底层知识。

2026-02-07 17:32:41 2036

原创 C语言——内存函数

本文系统讲解C语言中四大内存操作函数:memcpy实现任意数据拷贝,memmove支持重叠内存拷贝,memset初始化内存为指定值,memcmp逐字节比较内存内容。通过实例演示其用法与返回机制,深入剖析内存拷贝与比较的底层逻辑,适用于学习数据结构与底层编程。

2026-02-05 17:08:12 603

原创 C语言-字符函数和字符串函数

字符分类函数用于确定字符的类型。必须包含头文件#include <ctype.h>这些函数的返回值都是int类型,当条件为真时返回随机值,当条件未假时返回0。

2026-02-04 14:45:36 1143

空空如也

空空如也

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

TA关注的人

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