- 博客(54)
- 收藏
- 关注
原创 C ++ 智能指针
C++智能指针是解决内存管理痛点的关键工具,基于RAII思想实现资源的自动释放。标准库提供三种智能指针:unique_ptr独占所有权,禁止拷贝但支持移动;shared_ptr通过引用计数实现资源共享;weak_ptr作为弱引用解决循环引用问题。智能指针通过封装原始指针,在析构时自动释放资源,从根本上解决了内存泄漏和异常安全问题。现代C++开发中应优先使用智能指针替代裸指针,其中unique_ptr适合独占场景,shared_ptr用于共享资源,weak_ptr则用于打破循环引用。合理使用智能指针能显著提高
2026-03-20 21:25:42
326
原创 C++ 异常
本文深入探讨了C++异常处理机制的核心原理与实践应用。文章首先对比了C++异常与传统错误码处理的优势,指出异常机制实现了问题检测与处理的分离。随后详细解析了异常抛出、捕获、栈展开等关键流程,并通过代码示例展示了自定义异常继承体系的设计方法。重点讲解了异常重新抛出、异常安全保证等高级特性,强调RAII在资源管理中的重要性。最后介绍了标准库异常体系及noexcept规范。文章指出,合理运用异常处理机制能显著提升程序的健壮性和可维护性,但需注意资源泄漏风险和多态捕获等关键细节。
2026-03-18 23:39:17
509
原创 C++11 核心知识点整理
本文系统讲解了C++11新特性,包括列表初始化、右值引用、移动语义等核心内容。通过代码示例详细展示了统一初始化语法、移动构造/赋值的实现原理,以及如何利用右值引用提升容器性能。重点分析了可变参数模板、lambda表达式和包装器的应用场景,如emplace系列接口优化容器插入效率,function+bind实现回调机制等。文章还对比了传统写法与现代C++写法在逆波兰表达式等案例中的差异,帮助开发者理解如何利用新特性编写更高效、简洁的代码。
2026-03-14 23:38:32
475
原创 用哈希表封装 myunordered_map 和 myunordered_set
本文系统分析了哈希表的实现原理与C++ STL中的具体应用。首先介绍了SGI-STL中非标准hash_map/hash_set的实现结构,重点解析了底层hashtable的模板参数设计和链表桶式存储机制。随后详细演示了如何基于拉链法实现标准unordered_map/unordered_set,包括:1)通过KeyOfT仿函数实现键值提取;2)迭代器在桶间跳转的实现;3)operator[]的插入访问机制;4)扩容时节点重哈希处理。文章特别强调了键不可修改性的实现技巧,并对比了开放寻址与拉链法的核心思想,为
2026-03-10 21:36:59
360
原创 哈希表实现
本文系统讲解了哈希表的核心原理与实现方法。哈希表通过哈希函数将关键字映射到存储位置,实现O(1)时间复杂度的查找、插入和删除操作。主要内容包括:1)哈希函数设计方法(直接定址、除留余数等);2)冲突解决策略,详细分析了开放定址法(线性/二次探测)和链地址法的实现;3)负载因子对性能的影响及扩容机制;4)完整代码实现,包括字符串特化的BKDR哈希算法。文章通过对比两种实现方式的优缺点,帮助读者深入理解哈希表在平衡时空效率上的设计思想,为算法和工程实践提供理论基础。
2026-03-08 20:26:34
428
原创 红黑树实现 map 和 set &unordered_map 和 unordered_set 使用
本文深入分析了C++ STL中的关联容器实现原理,重点比较了基于红黑树的map/set与基于哈希表的unordered_map/unordered_set。红黑树容器通过自平衡特性保证了O(logN)的操作复杂度,支持有序遍历;哈希表容器则提供平均O(1)的高效操作,但遍历无序。文章详细剖析了红黑树的泛型设计、迭代器实现及map的operator[]机制,并通过性能测试验证了哈希表在查找场景的优势。针对自定义类型作为键值的情况,强调了必须实现哈希函数和判等操作。开发者应根据有序性需求和性能要求合理选择容器类
2026-03-06 21:16:47
385
原创 C++ 红黑树
本文详细讲解红黑树的原理、性质、节点结构,重点实现红黑树插入操作,包含变色、左单旋、右单旋、左右双旋、右左双旋五种调整情况,并配上每一步旋转前后示意图与完整可运行C++代码,最后通过验证函数检查红黑树规则,适合数据结构学习与面试复习。
2026-03-03 20:54:29
383
原创 C++ AVL树
本文深入解析AVL自平衡二叉搜索树的核心原理与实现。AVL树通过平衡因子监控和四种旋转操作(左单旋、右单旋、左右双旋、右左双旋),严格保证树高始终为O(logN),解决了普通二叉搜索树可能退化为链表的问题。文章详细拆解了节点结构、插入逻辑、平衡因子更新规则,并给出完整的C++实现代码,包括旋转操作的具体步骤和平衡检测方法。通过理论与实践结合,帮助读者掌握AVL树的设计思想与工程实现,确保增删查改操作稳定在O(logN)时间复杂度。
2026-03-02 17:15:36
858
原创 C++ STL中 set 和 map
本文深入解析C++ STL中的关联式容器set和map,重点介绍其红黑树底层实现带来的高效操作特性(增删查均为O(logN))。详细讲解set/multiset和map/multimap的核心差异、接口使用及实际应用场景,包括构造方法、增删查操作、迭代器失效规则等关键知识点。通过LeetCode例题(如环形链表检测、单词频率统计等)展示如何利用这些容器解决实际问题,对比不同解题思路的优劣。特别强调operator[]的灵活应用及自定义排序规则的实现技巧,为开发者提供从基础到实战的全方位指导。
2026-02-28 15:54:04
1223
原创 C++ 二叉搜索树(BST)
本文详细讲解了二叉搜索树(BST)的核心概念与实现。主要内容包括:BST的定义与性质,插入、查找、删除等基本操作的实现方法(递归与非递归版本),以及key单值和key-value键值对两种存储方式。文章通过图示和代码示例详细说明了各种操作的具体步骤,并给出了字典翻译、单词统计等实际应用场景。最后总结了BST的特点:中序遍历有序,时间复杂度最优O(logN),最差O(N),是学习更高级数据结构如平衡树和map/set的基础。全文内容系统全面,适合学习、复习和面试准备。
2026-02-26 15:35:15
936
原创 C++ 多态
本文深入解析C++多态机制,涵盖概念、实现原理及常见考点。首先区分编译时多态(函数重载、模板)和运行时多态(虚函数),重点阐述动态多态的构成条件:基类指针/引用调用虚函数,且派生类完成重写。详细剖析虚函数表机制,解释动态绑定过程,并通过代码示例演示多态效果。文章还涉及协变、虚析构函数、override/final关键字等进阶内容,对比重载/重写/隐藏的区别,讲解纯虚函数与抽象类的特性。最后总结多态的核心思想与实现关键,强调虚函数表在底层实现中的作用,为深入理解面向对象编程提供完整指导。
2026-02-25 17:45:02
1536
原创 C++ 继承
本文系统讲解C++继承机制,包括基本概念、语法规则、成员访问控制、默认成员函数、多继承与菱形继承问题,以及继承与组合的选择。重点分析了继承的作用域规则、派生类默认成员函数的生成机制、菱形继承的二义性问题及其虚继承解决方案。通过代码示例详细演示了继承中的切片、隐藏规则、静态成员共享等特性,并对比了继承与组合的适用场景。文章强调public继承应满足is-a关系,组合优先于继承的设计原则,帮助开发者深入理解继承的底层原理与实战应用。
2026-02-24 22:04:35
1336
原创 C++ 模板进阶
本文深入解析C++模板技术的三大核心知识点:非类型模板参数、模板特化和分离编译。首先介绍非类型模板参数的编译期常量特性及其在静态数组等场景的应用;其次探讨模板特化(全特化/偏特化)解决特殊类型处理问题的方法;最后分析模板分离编译的链接问题及解决方案(声明与实现合并、显式实例化)。文章通过丰富的代码示例(如静态数组实现、优先级队列等)展现模板在泛型编程中的关键作用,既保证类型安全又兼顾性能,为STL源码分析和自定义组件开发奠定基础。
2026-02-23 16:03:57
1143
原创 C++ STL stack、queue 与容器适配器详解
本文详细解析了C++ STL中的三种容器适配器:栈(stack)、队列(queue)和优先级队列(priority_queue)。首先介绍了它们的基本特性、底层容器选择和核心接口,然后通过代码示例和经典面试题(如最小栈、层序遍历等)展示实际应用。文章还深入剖析了容器适配器的设计原理,包括仿函数的使用、底层容器选择原因(deque和vector)以及模拟实现方法。最后总结了各数据结构的特点、适用场景和性能考量,帮助读者全面掌握这些高频面试考点。
2026-02-22 22:01:12
779
原创 C++ STL list 容器
本文深入解析C++ STL中的list容器,系统梳理其双向循环链表结构特性、常用接口及迭代器失效机制,并模拟实现简化版list。通过对比vector,揭示list在插入删除操作上的O(1)优势与随机访问劣势,分析其独特接口如splice的高效性。实测数据表明,虽然list排序较慢,但其节点操作优势明显。文章强调应根据实际场景在连续内存访问效率与链表操作灵活性间权衡选择,为开发者提供容器选型指导。
2026-02-22 11:07:38
1087
原创 C++ STL vector
本文全面解析C++ STL中的vector容器,从基础使用到深度实现。主要内容包括:1. vector基础使用:构造函数、迭代器、容量管理(resize/reserve)、增删查改操作;2. 核心原理:扩容机制(1.5/2倍增长)、二维vector实现、迭代器失效问题及解决方案;3. 模拟实现:手写vector类模板,详解深拷贝与memcpy陷阱;4. 典型应用:结合OJ题目讲解异或运算、摩尔投票、电话号码组合等算法实现。文章强调vector作为动态数组的高效随机访问特性,并指出正确管理迭代器失效和深拷贝是
2026-02-18 20:09:45
1460
原创 C++ string类
int main()// 不要使用cin>>line,因为它遇到空格就结束了return 0;string s;;return 0;
2026-02-17 12:15:00
1008
原创 C++ 模板初阶:从泛型编程到函数模板与类模板
本文系统讲解了C++模板的核心概念与应用。主要内容包括:1)泛型编程思想及模板的必要性;2)函数模板的定义、原理与实例化(隐式/显式)方法;3)类模板的定义格式与必须显式实例化的特点;4)模板参数匹配原则及类型转换规则。文章通过交换函数、栈类等示例,详细阐述了模板如何实现代码复用,并比较了模板函数与普通函数的区别。掌握模板是C++进阶的关键,能显著提升代码的通用性和可维护性。
2026-02-14 20:03:30
1214
原创 C/C++内存管理
本文系统梳理了C/C++内存管理的核心知识,重点对比了malloc/free与new/delete的区别。首先介绍了内存分布的五大区域(栈、堆、数据段等),通过代码示例分析变量存储位置。然后详细解析了C语言的malloc/calloc/realloc/free和C++的new/delete机制,特别强调new/delete会调用构造/析构函数的关键特性。文章深入探讨了operator new/delete的实现原理,解释了new[]/delete[]必须配对使用的原因,并介绍了定位new表达式的特殊用法。最
2026-02-14 19:25:32
1462
原创 C++ :类和对象(4)
本文系统介绍了C++中的构造函数初始化列表、类型转换、static成员、友元、内部类等核心概念。重点解析了初始化列表的执行顺序规则、缺省值优先级、静态成员变量/函数的特性,以及友元关系的单向性特点。通过多个代码示例详细演示了单参数构造函数的隐式类型转换、匿名对象的生命周期、对象拷贝时的编译器优化策略等关键知识点。文章还深入分析了内部类作为外部类友元的特性,以及如何利用静态成员实现特定算法。这些内容全面覆盖了C++面向对象编程中的重要技术点,对深入理解类机制和对象行为具有重要参考价值。
2026-02-13 17:20:03
1059
原创 C++ : 类和对象(3)
本文详细介绍了C++运算符重载的核心概念与实现方法。主要内容包括:1)运算符重载基础规则,如哪些运算符不可重载、参数数量要求等;2)赋值运算符重载的特殊性,强调深拷贝和自赋值检查;3)日期类(Date)的完整实现,演示了关系运算符、算术运算符和流运算符的重载技巧;4)const成员函数的作用及取地址运算符重载的应用场景。重点指出<<和>>运算符必须作为友元函数重载,赋值运算符必须为成员函数,以及前后置++/--的实现差异。通过日期类案例展示了运算符重载的实际应用,帮助理解如何通过代码
2026-02-12 16:48:16
1023
原创 C++ :类和对象(2)
C++中,若用户未显式定义,编译器会自动生成6个默认成员函数,其中最重要的是前4个:1. 构造函数:对象实例化时初始化对象。2. 析构函数:对象生命周期结束时清理资源。3. 拷贝构造函数:使用同类对象初始化新对象。4. 赋值运算符重载:将一个对象的值赋给另一个对象。5. 普通对象取地址重载:operator&()。6. const对象取地址重载:operator&() const。学习重点:理解编译器默认生成函数的行为,以及何时需要手动实现。
2026-02-11 13:38:44
592
原创 C++ :类和对象(1)
本文详细讲解C++类与对象的核心知识点,包括类的定义、访问限定符、类域、对象实例化与内存模型,并深入解析this指针的本质、存储位置与调用原理。同时通过C与C++实现栈结构的对比,清晰展现面向对象封装特性与this指针的底层机制,帮助理解C++面向对象编程的设计思想。
2026-02-10 11:19:11
1492
原创 C语言——预处理详解
基本语法• name:宏名(建议大写)• stuff:替换文本(可以是常量、表达式、语句等)示例代码#define MAX 1000 // 定义数值常量#define reg register // 为关键字创建别名;)// 用符号替换循环实现case // 简化case语句写法多行宏定义(续行符 \)⚠️ 重要注意:不要在宏定义后加;// 错误:多了分号max = MAX;// 替换后为 max = 1000;;→ 两条语句elsemax = 0;// else 无匹配if,语法错误。
2026-02-09 21:55:45
1251
原创 C语言编译与链接全流程:从源码到可执行程序的幕后之旅
本文详细拆解C语言从源码到可执行程序的完整过程,深入讲解预处理、编译、汇编、链接四大阶段的核心原理与实操命令,并结合代码示例解析多文件项目的链接机制,帮助开发者理解程序构建的底层逻辑。
2026-02-08 14:08:33
1050
原创 C++入门(2)
• 本质:给已存在的变量取别名,编译器不会为引用变量开辟独立内存空间,与引用对象共用同一块内存。• 语法格式:类型& 引用别名 = 引用对象;
2026-02-06 21:44:13
688
原创 数据结构——排序
本文系统介绍了8种经典排序算法,包括插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序(Hoare法/挖坑法/前后指针法)、归并排序和计数排序。详细解析了各算法的核心思想、代码实现、时间复杂度(最优/最坏/平均情况)及适用场景,特别强调了快速排序的三数取中优化、归并排序的分治策略以及计数排序的数值偏移技巧。通过对比分析各算法的稳定性、空间复杂度和实际效率,为不同场景下的算法选择提供了理论依据。
2026-02-06 17:58:12
785
原创 C语言文件操作
本文围绕C语言文件操作展开全面解析,从文件分类、文件指针核心概念入手,详细讲解文件打开关闭、顺序读写、随机读写的常用函数及使用方法,补充文件缓冲区机制、结束与错误判断的关键要点,搭配完整代码示例梳理操作流程,并总结常见操作误区与避坑原则。内容覆盖文件操作全流程核心知识点,兼具理论性与实操性,帮助开发者掌握数据持久化实现方法,提升程序数据处理的稳定性与灵活性。
2026-02-04 18:00:35
1095
原创 堆和二叉树
本文系统介绍了树与二叉树的基本概念、存储结构及应用。主要内容包括:1.树的定义与相关术语(度、层次、高度等),重点讲解孩子兄弟表示法将普通树转换为二叉树的方法;2.二叉树的基本性质、特殊类型(满/完全二叉树)及存储结构(顺序/链式);3.堆的实现与应用(堆排序、Top-K问题);4.二叉树典型算法题解析(遍历、翻转、平衡判断等)。通过理论讲解与代码实现相结合,帮助读者掌握树形数据结构的核心知识与应用技巧。
2026-02-03 17:28:57
870
原创 C语言——动态内存管理
本文聚焦C语言中动态内存管理与内存区域划分的核心知识点,系统梳理了动态内存操作的常见错误与规避方案,深入解析了柔性数组的特性、使用场景及其相较于“结构体+指针”方案的优势,并清晰划分了C/C++程序的内存区域及各区域的存储规则与生命周期。通过经典笔试题与实战代码的结合,本文旨在帮助开发者建立扎实的底层内存管理思维,有效规避野指针、内存泄漏等常见问题,提升代码的稳定性与效率,为进阶C语言编程筑牢基础。
2026-02-02 15:44:34
1574
原创 数据结构——栈和队列
1. 核心操作限制• 队列仅允许在队尾(Rear)进行插入操作(入队),在队头(Front)进行删除操作(出队)。• 队头是第一个入队的元素所在位置,队尾是最后一个入队的元素所在位置。2. 核心原则:先进先出(FIFO,First In First Out)最先入队的元素,一定会最先出队;最后入队的元素,只能最后出队。举例:元素按 1→2→3→4 顺序入队,出队顺序只能是 1→2→3→4;
2026-01-30 21:56:44
768
原创 C语言——自定义类型:结构体、联合体、枚举
本文详解C语言结构体、联合体、枚举三大自定义类型,从基础语法、底层原理到实战应用逐一拆解,结合代码剖析内存对齐、内存共享等核心特性与高频考点,明晰三者在数据封装、内存优化、代码规范中的作用,为C语言进阶和底层开发夯实基础。
2026-01-30 19:32:44
742
原创 整数与浮点数的内存存储
本文详解C语言数据内存存储核心规则,涵盖整数原反补码、大小端字节序、浮点数IEEE 754标准三大核心内容,搭配代码实现与经典习题,剖析各类型数据存储逻辑、转换规则及实际应用问题,提炼底层核心规律,阐明其对理解C语言运行逻辑和解决开发问题的关键意义。
2026-01-29 22:55:55
783
原创 C语言——双向链表
本文介绍双向链表适配双向遍历、频繁删除已知节点的典型应用场景,梳理其指针维护、边界判断相关的高频错误及避坑方案,指出该结构以少量空间换双向遍历和O(1)删已知节点的核心优势,强调其操作本质是合理维护prev和next指针,掌握核心要点后可拓展学习循环双向链表、LRU缓存等进阶应用。
2026-01-28 20:27:44
1042
原创 C语言——内存函数
内存操作是 C 语言底层编程的核心,memcpy、memmove、memset、memcmp 是 <string.h> 中的四大核心函数,用于数据拷贝、内存初始化和比较。本文梳理了它们的原型、功能、使用场景与注意事项,通过数组、结构体等多类型示例演示用法,并提供带注释的手写实现,解析逐字节操作、内存重叠处理等底层原理。同时对比函数差异,总结指针校验、避免越界等避坑指南,助力开发者理解底层逻辑,提升代码效率与健壮性,适用于学习、面试与开发实践。
2026-01-28 20:10:55
1318
原创 C语言——字符与字符串处理函数
本文系统梳理了C语言中与字符和字符串处理相关的标准库函数,涵盖字符分类与转换、字符串操作(长度计算、拷贝、拼接、比较、分割)、错误信息处理三大核心模块。通过详细解析函数功能、核心要点、适用场景,并结合代码示例与模拟实现,帮助开发者掌握从基础字符判断到复杂字符串操作的全流程能力,提升代码健壮性与开发效率。
2026-01-27 20:20:30
1153
原创 C语言——单链表
本文围绕单链表展开讲解,介绍其结构特性与核心操作,并结合六道经典编程题,通过C语言实现解析单链表的实用解题技巧,助力夯实数据结构基础,掌握指针核心运用逻辑。
2026-01-21 14:17:47
890
原创 C++第一课
• 定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。• namespace本质是定义出一个域,这个域跟全局域各自独立,不同的域可以定义同名变量,所以下面的rand不在冲突了。• C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找一个变量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。
2026-01-18 21:15:29
591
1
原创 算法复杂度入门
算法复杂度是衡量程序效率的核心指标,直接决定代码在不同数据规模下的运行表现。本文围绕时间复杂度与空间复杂度的核心概念,详细拆解大O渐进表示法的推导规则,对比O(1)、O(log n)、O(n)等常见复杂度的效率差异;结合“消失的数字”“旋转数组”两道经典OJ题目,实战演示求和法、异或法、三次逆置法等解题思路,并分析各方法的复杂度特性。通过“理论+代码+拆解”的模式,帮助开发者快速掌握复杂度分析方法,建立高效编程思维,为算法优化与工程实践奠定基础。
2026-01-17 19:27:54
716
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅