自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 从底层到应用:开散列哈希表与_map/_set 的完整实现(附逐行注释)

本文详细讲解了如何从零实现C++中的哈希关联容器(unordered_map/unordered_set)。首先介绍了基础组件:哈希函数和质数工具类,用于键值映射和冲突处理。然后重点实现了开散列哈希表的核心结构,包括哈希节点、支持跨桶遍历的迭代器,以及插入、查找、删除等核心操作。最后基于通用设计思想,封装实现了_map和_set容器,并通过测试验证了功能完整性。文章不仅提供了完整可运行代码,还深入分析了哈希表的设计原理和性能考量,如负载因子控制、迭代器失效等问题。通过该实现,开发者可以深入理解STL哈希容器

2025-09-28 23:50:12 954

原创 深入理解哈希表:闭散列与开散列两种实现方案解析

本文详细解析了哈希表的两种主要实现方式:闭散列(开放定址法)和开散列(链地址法)。闭散列通过二次探测解决冲突,采用标记删除策略,空间利用率高但扩容成本较大;开散列使用链表存储冲突元素,实现简单且删除高效,但需额外指针空间。文章提供了完整的C++实现代码,对比了两种方法在空间利用率、冲突处理、删除操作等方面的差异,并分析了适用场景。其中闭散列适合空间受限环境,开散列则更适用于动态数据和频繁修改的场景。

2025-09-28 23:27:55 1030

原创 深入剖析 C++ 红黑树实现与 set/map 容器封装(附完整可运行代码)

本文详细介绍了红黑树的实现原理及其在STL容器中的应用。红黑树通过5条核心性质确保自平衡,使树高维持在O(logn)级别,保证高效查找。文章从节点结构、迭代器实现到核心插入和平衡调整操作,完整展示了红黑树的实现过程,并基于红黑树封装了set和map容器。set实现元素有序存储,map通过键值对和operator[]提供便捷访问。测试代码验证了红黑树和容器的功能,包括插入、遍历、查找等操作。掌握红黑树有助于理解STL关联容器的底层机制,提升对自平衡数据结构的认识。

2025-09-23 23:43:45 728

原创 手写 C++ string 类:从底层原理到具体实现的深度解析

本文详细介绍了如何从零实现一个工业级简化版C++字符串类(bobo::string),揭示了std::string的设计原理。文章首先阐明了手写string类的意义:理解内存管理机制、掌握类设计精髓、提升问题排查能力。随后分步讲解了核心实现,包括构造/析构函数、拷贝控制、容量管理、字符串操作、迭代器支持和运算符重载等关键环节,重点强调了深拷贝、移动语义、异常安全等C++核心特性。通过完整的代码示例展示了如何实现一个兼容STL风格、支持动态扩容的字符串类,并提供了测试用例验证功能。最后指出扩展方向,帮助读者深

2025-09-20 01:38:58 825 3

原创 手把手教你实现红黑树:从原理到完整 C++ 代码

红黑树是一种高效的自平衡二叉搜索树,通过五项颜色规则和旋转操作确保近似平衡,使查找、插入、删除操作的时间复杂度稳定在O(logn)。本文详细解析了红黑树的核心原理:1)节点结构与颜色规则;2)插入操作的四步流程(定位、插入、回溯、平衡);3)关键旋转操作(左旋/右旋)的实现;4)提供完整C++代码实现及验证方法。红黑树相比AVL树旋转次数更少,适合频繁修改的场景,广泛应用于STL map/set、数据库索引等领域。理解红黑树需要掌握其"黑高平衡"的核心思想,即通过约束红色节点分布来限制树

2025-09-19 17:29:16 676

原创 深入理解 AVL 树

本文介绍了AVL树的自平衡机制及其C++实现。AVL树通过平衡因子(BF)确保二叉查找树始终保持平衡,避免退化为链表。当BF绝对值超过1时,通过四种旋转操作(左旋、右旋、左右双旋、右左双旋)恢复平衡。文章详细解析了节点结构设计、插入操作流程(包括平衡因子更新和旋转处理)以及辅助功能(遍历、高度计算等)。最后提供了完整的C++实现代码,包含节点结构定义、旋转操作和平衡校验,确保树始终保持O(logn)的时间复杂度。AVL树通过严格的平衡控制,为高效查找、插入和删除提供了可靠保证。

2025-09-18 21:13:03 881

原创 二叉搜索树(BST)详解

本文介绍了二叉搜索树(BST)的核心原理与C++实现。BST作为二叉树的重要变种,遵循"左小右大"规则,具有中序遍历有序的特性。文章详细解析了BST的节点结构设计、类封装方法以及三大核心操作:插入(保持有序性)、查找(利用有序特性高效定位)、删除(处理三种子树情况)。实现上采用模板类提升通用性,并通过递归和迭代相结合的方式完成各项操作。最后分析了BST的优缺点:在随机数据下操作效率高(O(logn)),但可能退化为链表;适用于需要频繁动态操作且数据分布随机的场景。文章提供了完整C++代码实现。

2025-09-15 12:27:51 248

原创 深入理解 C++ 仿函数与优先队列

优先队列打破FIFO规则,按优先级出队,在任务调度和最短路径算法中应用广泛。C++通过容器适配器和堆结构实现优先队列,配合仿函数实现灵活排序。本文通过自定义优先队列代码分析其实现原理,展示C++泛型编程中"算法与数据结构分离"的设计思想,即以仿函数定义行为、容器适配存储,实现高效灵活的优先级队列。

2025-07-23 10:00:00 131

原创 深度解析 C++ 容器适配器:queue 的实现原理与底层容器选型

摘要:C++ STL中的容器适配器queue基于现有容器构建,通过接口重塑实现FIFO功能。文章详细解析了queue的设计理念,对比了vector、list和deque作为底层容器的性能差异。其中deque因分段连续存储结构成为默认选择,兼具高效双端操作和良好缓存局部性。文章还强调了queue不支持迭代器、pop不返回元素等特性,并指出容器适配器体现了接口适配重于数据存储的设计思想。通过分析queue实现,展示了STL复用现有组件、保证数据结构正确性的核心设计理念。

2025-07-22 10:00:00 230

原创 C++ 栈的模拟实现:基于容器适配器的灵活设计

本文探讨了栈这一遵循LIFO原则的基础数据结构在C++中的实现方式。通过分析标准库的容器适配器模式,重点研究了bobo命名空间下自定义栈类的设计思路,展示了如何根据需求灵活选择底层容器来实现栈功能。

2025-07-21 10:00:00 152

原创 stl-list模拟

模拟stl-list的部分函数,增加对stl-list的理解程度。

2025-07-18 13:57:24 121

原创 stl-vector模拟

主要进行vector的模拟,方便我们更好的对stl进行使用,vector有模板,我们写在一个.h文件。

2025-07-18 10:00:00 220

原创 stl-string模拟

主要进行cpp中string的模拟,方便我们更好的对stl进行使用,string没有模板,我们将头文件和函数写在两个不同的文件。

2025-07-17 21:49:48 299

原创 值得纪念的几道简单编程题

这篇文章介绍了多种常见算法问题的C语言实现方法,包括:计算最大公约数(枚举法和辗转相除法)计算最小公倍数(枚举法和利用最大公约数法)整数平均值计算方法判断字符串字符唯一性(位运算)计算汉明距离(位运算)找出数组中两个单独出现的数字(位运算)爬楼梯问题(递归、记忆化搜索、动态规划)统计二进制数中1的个数(位运算)有序矩阵搜索(枚举、二分查找、贪心算法)替换数组元素为右侧最大值(逆序遍历)这些算法涵盖了数学计算、位运算、递归、动态规划等多种技术,展示了不同算法思路在解决实际问题中的应用

2025-06-04 23:14:33 391

原创 二叉树的介绍及其相关函数

二叉树的介绍及其相关函数

2025-04-28 16:49:06 407 1

原创 打dotall

打dotall

2025-04-24 00:06:22 380 1

原创 堆,堆排序,top-k问题

堆,堆排序,top-k问题

2025-04-20 13:39:30 720 1

原创 队及其介绍

2025-04-14 15:25:27 460 1

原创 栈及其相关介绍

2025-04-10 15:15:57 315 1

原创 双向带头链表的相关介绍

双向带头链表的相关介绍

2025-04-01 20:37:49 298 1

原创 链表的相关介绍

链表的基本函数介绍

2025-03-28 20:45:45 668 1

原创 顺序表的介绍

简单介绍顺序表的介绍和相关的函数说明。

2025-03-27 21:28:09 415

原创 查验身份证

一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。输入格式:输入第一行给出正整数()是输入的身份证号码的个数。随后行,每行给出1个18位身份证号码。现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。

2025-03-11 18:12:46 347

原创 到底有多二

一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336是个11位数,其中有3个2,并且是负数,也是偶数,则它的犯二程度计算为:,约为81.82%。本题就请你计算一个给定整数到底有多二。输入格式:输入第一行给出一个不超过50位的整数N。输出格式:在一行中输出N犯二的程度,保留小数点后两位。输入样例:-13142223336输出样例:81.82%

2025-03-11 18:10:21 248

原创 大笨钟解法

微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。一般敲钟的点数是根据敲钟时间而定的,如果正好在某个整点敲,那么“当”数就等于那个整点数;另外,虽然一天有24小时,钟却是只在后半天敲1~12下。例如在23:00敲钟,就是“当当当当当当当当当当当”,而到了23:01就会是“当当当当当当当当当当当当”。在午夜00:00到中午12:00期间(端点时间包括在内),笨钟是不敲的。根据当前时间替大笨钟敲钟,即在一行中输出相应数量个Dang。下面就请你写个程序,根据当前时间替大笨钟敲钟。

2025-03-11 18:08:13 828

原创 个位数统计

f22给定一个 k 位整数 N=dk−1​10k−1+⋯+d1​101+d0​ (0≤di​≤9, i=0,⋯,k−1, dk−1​>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。

2025-03-07 20:25:27 640

原创 strlen函数的细节及其模拟实现

strlen函数的细节及其模拟实现

2025-02-27 22:23:41 547

原创 根据qsort函数改变的冒泡函数

根据qsort函数改变的冒泡函数

2025-02-24 23:33:25 301 2

原创 库函数(qsort)的简单介绍

库函数(qsort)的简单介绍

2025-02-24 23:21:36 335

原创 简单的两种方法实现加减乘除的计算器

简单的两种方法实现加减乘除的计算器

2025-02-23 18:23:10 316

原创 交换两个整数的小方法

交换两个整数的小方法

2025-02-21 00:31:23 338

原创 努力当下,可有未来!

第一次写博客的感受

2025-02-20 23:47:03 191

空空如也

空空如也

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

TA关注的人

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