- 博客(47)
- 收藏
- 关注
原创 【C++】模板进阶:非类型模板参数与模板的特化
本文主要介绍了C++模板编程中的两个重要特性:非类型模板参数和模板特化。非类型模板参数允许在模板中传递常量对象、指针或引用,常用于静态数组大小控制等场景。模板特化分为函数模板特化和类模板特化,其中函数模板特化通过template<>声明特定类型的实现,而类模板特化包含全特化(全部参数特化)和偏特化(部分参数特化)。文章以比较函数和优先队列仿函数为例,演示了如何通过特化处理指针等特殊类型,满足特定需求。模板特化扩展了模板的灵活性,是泛型编程中的重要技术。
2026-08-12 10:17:00
309
23
原创 【C++】反向迭代器:反向迭代器的底层认识与模拟实现
本文介绍了C++中反向迭代器的实现原理,通过适配器设计模式复用普通迭代器作为底层,结合运算符重载实现与迭代器相反的遍历方向。反向迭代器的核心在于封装迭代器类型并重载操作符,使其++对应迭代器的--,从而反向遍历容器。文章还解释了operator*返回前一个位置值的原因,以保持rbegin与end对称的逻辑关系。最后展示了反向迭代器在类中的实例化方式,强调其本质是通过封装普通迭代器实现反向遍历功能。
2026-08-12 10:12:08
431
21
原创 【C++】deque:深度剖析双端队列deque的核心机制
本文深入解析了C++ STL中deque容器的底层实现原理。deque通过中控数组(map)管理多个固定大小的缓冲区(buffer),以分段连续的方式模拟线性存储,从而高效支持两端操作(push_back/push_front)。其核心在于迭代器设计,通过cur、first、last、node四个指针实现跨缓冲区的随机访问(operator[]时间复杂度为O(1))。
2026-08-08 09:50:42
589
23
原创 【C++】stack和queue的应用及其模拟实现:适配器与容器适配器
本文列举了stack和queue成员函数的基本使用,了解stack和queue的特性,以及使用线性容器模拟stack和queue。最后讲解了适配器的设计模式以及容器适配器的概念和认识
2026-08-08 09:19:53
375
6
原创 【C++】深入剖析list:list及其双向迭代器实现
本文介绍了C++ STL中的list容器及其模拟实现的要点。深度解析了list迭代器的封装和原理。同时验证了list的成员函数sort的效率陷阱
2026-07-31 11:48:47
537
16
原创 《算 · 法》题目解析篇(1):最近公共祖先问题,线段树,最长回文子序列
本文解析了三个算法题目,分别涉及递归、动态规划和线段树: 二叉树的最近公共祖先(LeetCode 236) 解法一:暴力递归查找节点,时间复杂度O(n²)。 解法二:路径查找转化为相交链表问题,使用栈保存路径,时间复杂度O(n)。 最长回文子序列(LeetCode 516) 采用区间动态规划,dp[i][j]表示子串[i,j]的最长回文子序列长度,根据首尾字符是否相等进行状态转移,时间复杂度O(n²)。 贪婪大陆(洛谷 P2184) 使用线段树解决区间查询问题,通过维护区间信息高效处理查询和修改操作。
2026-07-31 11:31:16
317
16
原创 【C++ 】从vector的使用到底层的模拟实现
vector作为一个可变长数组,其底层实现却是有很多的坑,包括但不限于:迭代器失效,容器深层次的深浅拷贝,迭代器区间构造的调用歧义……
2026-07-19 14:29:12
415
8
原创 【C++】STL详解:string的模拟实现
本文介绍了如何手动实现C++中的std::string类,主要包括默认成员函数(构造函数、拷贝构造、赋值重载、析构函数)以及迭代器的实现。通过传统与现代两种方式对比,深入探讨了深拷贝与交换优化的技巧,同时分析了算法库swap的效率问题。文章还强调了命名空间的使用以避免冲突,并详细讲解了const迭代器的设计。通过简化版的string类实现,帮助读者理解其底层机制与设计思想。
2026-07-19 14:18:14
274
20
原创 【C++】STL详解:string的基本使用
本文全面介绍了C++标准库中string类的核心功能与使用方法。主要内容包括: 构造与初始化:详解7种构造函数,包括默认构造、C字符串构造、拷贝构造、子串构造等,以及赋值运算符重载的3种形式。 迭代器机制:讲解begin()/end()迭代器、const迭代器、反向迭代器的使用,以及基于迭代器的范围for循环实现原理。 容量管理:分析size()/length()、capacity()、resize()、reserve()等函数的区别与使用场景,强调容量预分配的重要性。 元素访问:对比operator[]、
2026-07-14 22:41:00
287
7
原创 【C++】内存管理:内存分布,new/delete的使用及细节处理,new/delete的底层,定位new表达式
C++内存管理——内存分布,new/delete的使用及细节处理,new/delete的底层,定位new表达式
2026-07-14 22:28:23
346
2
原创 【C++】类和对象(下):初始化列表,类型转换,static成员,友元,内部类,匿名对象,编译器的优化拓展
C++类和对象(下)——初始化列表,类型转换,static成员,友元,内部类,匿名对象,现代编译器的内部优化
2026-07-10 11:48:23
342
7
原创 【C++】类和对象(中):构造函数,析构函数,拷贝构造函数,赋值运算符重载重载,取地址运算符重载
本文介绍了C++类中的4种默认成员函数:构造函数、析构函数、拷贝构造函数和赋值运算符重载。主要内容包括: 构造函数:用于初始化类成员变量,特点包括与类同名、无返回值、支持重载。默认构造可以是无参、全缺省或编译器生成的。编译器生成的构造对内置类型不处理,对自定义类型会调用其构造。 析构函数:用于对象生命周期结束时清理资源,函数名为~类名,无参无返回值。编译器生成的析构对内置类型不处理,对自定义类型会调用其析构。动态内存管理的类必须自定义析构。 拷贝构造:实现同类对象的拷贝初始化,是构造的重载形式。默认拷贝构造
2026-06-28 20:16:23
449
11
原创 【C++】类和对象(上):类的定义,类的实例化,类的大小,this指针,面试题分析
C++类对象——类的定义,访问限定符,类的实例化,类的大小,this指针,面试题分析
2026-06-22 20:34:05
546
3
原创 【数据结构】排序的拓展——快速排序的生态多样性与归并排序沾染文件操作
排序算法的拓展——三路划分快速排序,自省快速排序,文件归并排序和非递归实现归并排序
2026-06-12 17:03:07
465
1
原创 【数据结构与算法】排序的奇思妙想——七大排序算法详解
七大比较排序算法详解——插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序以及归并排序。同时还讲解了一个非比较排序——计数排序。文章结尾还总结了各大排序算法的比较和应用场景
2026-06-04 10:50:29
771
30
原创 【数据结构与算法】树(下):堆的实现与应用,二叉树的实现与基本操作
本文讲解了堆的实现与应用,堆排序,TopK问题,以及二叉树的链式实现和基本的操作
2026-05-26 18:26:45
499
19
原创 【数据结构与算法】数据结构基础——树(上):树的存储结构,满二叉树,完全二叉树,二叉树的存储结构
【数据结构与算法】数据结构基础——树(上):树的存储结构,满二叉树,完全二叉树,二叉树的存储结构
2026-05-24 11:56:00
582
12
原创 【数据结构与算法】算法竞赛篇-最短路问题:dijkstra,bellman_ford,spfa与floyd
本文详细讲解了最短路问题的各种算法,dijkstra算法,bellman_ford算法,spfa,floyd算法,以及不同算法的使用场景和扩展
2026-05-12 22:21:05
6425
15
原创 【算法竞赛】Kmp算法:两种方法解决字符串匹配问题
本文讲解了Kmp算法的作用和原理,用不同寻常的方式带你实现Kmp算法,同时还搭配有Kmp算法的例题练习
2026-04-18 21:46:28
1088
4
原创 数据结构【链表】
本文系统讲解了链表数据结构及其变体的实现原理与应用。首先对比顺序表和链表的性能差异,指出链表通过指针随机存储数据的优势。重点解析了单链表的结构定义和基本操作(插入、删除、查找),并通过C语言代码实现演示。随后引出双链表的概念,说明其通过增加前驱指针提升遍历效率的特性。 文章详细介绍了循环链表的实现机制,包括循环单链表和双向循环链表,特别强调尾节点指向头节点的关键修改。针对各类链表的操作差异,给出了清晰的代码示例和示意图解。最后通过两道经典算法题(环形链表检测和环入口查找)展示链表在实际问题中的应用,并附数学
2026-04-16 18:18:50
390
5
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅