- 博客(56)
- 收藏
- 关注
原创 【C++】为什么说红黑树更适合做map和set的底层?这篇文章能找到答案!
红黑树是一种近似平衡的二叉搜索树,通过颜色约束规则确保最长路径不超过最短路径的2倍。相比AVL树,红黑树的平衡控制更宽松,旋转次数更少,效率相近(O(logN))。实现时插入新节点默认为红色,通过检查父节点和叔叔节点的颜色来处理连续红色冲突,具体分为三种情况:1)叔叔存在且为红时变色处理;2)叔叔不存在或为黑时旋转调整。最终保持根节点为黑色,满足红黑树的四条规则。
2025-12-29 14:51:16
1543
43
原创 【C++】平衡树优化实战:如何手搓一棵查找更快的 AVL 树?
文章摘要: 本文介绍了AVL树的基本概念与实现方法。AVL树是一种自平衡二叉搜索树,通过平衡因子(右子树高度-左子树高度)确保任意结点左右子树高度差不超过1。文章详细讲解了AVL树结点的结构设计,包含键值对、左右子树指针、父指针及平衡因子。重点分析了插入操作的实现步骤:先按二叉搜索树规则插入结点,再更新平衡因子。更新过程中可能出现三种情况:平衡因子变为0时停止更新;变为±2时需旋转调整;或一直影响至根节点。代码示例展示了插入后平衡因子的更新逻辑,为后续旋转操作奠定基础。
2025-12-29 14:49:24
1340
57
原创 【C++STL】map / multimap 保姆级教程:从底层原理到实战应用!
本文介绍了C++标准库中的map容器,它是一种基于键值对(key-value)的有序关联容器。map通过平衡二叉搜索树(如红黑树)实现,保证元素按键升序排列且键唯一。文章详细讲解了map的基本概念、特点和使用方法,包括构造方式、迭代器遍历、插入数据(insert)、查找(find/count)和删除(erase)等核心操作。同时介绍了pair类的作用,它用于存储map中的键值对,便于数据访问和管理。通过代码示例展示了map的具体应用场景,如统计词频等。map适用于需要快速查找、有序存储键值对的场景,其操作时
2025-12-22 13:36:52
979
82
原创 【C++STL】set / multiset 保姆级教程:从底层原理到实战应用!
本文介绍了STL中的set容器,它是一种基于二叉搜索树实现的有序键值容器,具有自动排序和去重功能。文章首先讲解了set的基本概念和特点,包括有序性、唯一性以及操作复杂度。随后详细介绍了set的构造方法、迭代器使用以及增删查操作,重点分析了insert、find、erase等成员函数的用法及注意事项。此外,还讲解了lower_bound和upper_bound这两个边界查找函数的使用场景。文章通过代码示例演示了set的常见操作,并对比了set的find与算法库find的效率差异,强调set的高效查找特性。最后
2025-12-19 22:53:43
923
70
原创 【C++】如何快速实现一棵支持key或key-value的二叉搜索树?关键技巧一文掌握!
本文介绍了二叉搜索树的基本概念、性能分析和实现方法。二叉搜索树是一种特殊的二叉树,满足左子树所有节点值小于根节点,右子树所有节点值大于根节点的性质。文章详细讲解了二叉搜索树的插入、查找和删除操作的具体实现过程,并针对删除操作中可能出现的四种情况给出了相应的解决方案。其中重点分析了当删除节点有两个子节点时需要采用替换法删除的细节。文章内容清晰简洁,代码示例完整,适合初学者理解二叉搜索树的基本原理和实现方式。
2025-12-15 14:02:12
924
83
原创 【C++】你以为多态很复杂?看完这篇才发现如此简单!
本文介绍了C++多态的概念与实现方式。多态分为编译时多态(函数重载和模板)和运行时多态(虚函数重写)。实现多态需满足两个条件:基类指针/引用调用虚函数,且派生类完成虚函数重写。文章通过买票示例演示了多态的实现过程,并分析了虚函数重写、析构函数重写等关键机制。最后通过一道面试题加深对多态的理解,说明虚函数参数默认值的继承特性。多态机制提高了代码的灵活性和可扩展性,是面向对象编程的重要特性。
2025-12-11 17:05:40
1234
35
原创 【C++】菱形继承为何会引发二义性?虚继承如何破解?
本文探讨了C++继承中的多继承和菱形继承问题。单继承中派生类只有一个直接基类,而多继承中派生类有多个直接基类。菱形继承(如Student和Teacher共同继承Person,Assistant再继承Student和Teacher)会引发二义性和数据冗余问题。 通过虚继承(使用virtual关键字)可以解决这些问题。虚继承通过共享基类实例和虚基类表机制,确保不同路径继承的虚基类指向同一内存地址,从而消除数据冗余和二义性。但虚继承实现复杂且影响性能,建议尽量避免设计菱形继承结构。 文章通过代码示例展示了单继承、
2025-12-07 22:59:13
1281
77
原创 【C++进阶】继承(下)——挖掘继承深处的奥秘!
本文深入探讨了C++继承中派生类的默认成员函数实现要点。重点分析了派生类构造函数、拷贝构造、赋值重载和析构函数的特性:构造函数必须显式/隐式调用基类构造;拷贝构造需调用基类拷贝构造完成基类部分初始化;赋值运算符需通过基类作用域显式调用基类版本;析构函数会由编译器自动调用基类析构,无需手动调用。文章通过代码示例演示了各类成员函数的正确实现方式,并指出在无深拷贝需求时,多数情况下可使用编译器默认生成的版本。这些规则是理解C++继承机制的核心内容。
2025-12-03 19:45:33
685
43
原创 【C++ 进阶】继承(上):解锁代码复用的核心密码,体会代码复用的魅力!
本文探讨了C++继承机制的核心概念与应用。继承作为面向对象编程的三大特性之一,允许派生类复用基类的属性和方法,形成层次化结构。文章详细介绍了继承的定义方式,通过Person、Student和Teacher类的示例展示了代码复用优势。重点分析了不同继承方式(public/protected/private)对成员访问权限的影响,指出基类私有成员在派生类中始终不可访问。此外,还讨论了派生类对象向基类对象的赋值转换规则,以及类模板继承的特殊处理方式。通过stack类的实现示例,展示了继承在实际开发中的应用场景。
2025-11-30 13:20:08
1234
82
原创 【C++模板进阶】C++ 模板进阶的拦路虎:模板特化和分离编译,该如何逐个突破?
本文深入探讨了C++模板的进阶特性,主要包括非类型模板参数和模板特化两大核心内容。在非类型模板参数部分,通过静态栈示例展示了如何使用整型常量作为模板参数实现灵活的空间分配;在模板特化部分,针对指针比较问题演示了如何通过特化解决泛型编程中的特殊需求。文章通过代码实例详细解析了这些高级特性的应用场景和注意事项,帮助读者掌握模板编程中的难点技巧,使复杂的技术概念变得清晰易懂。
2025-11-22 22:18:47
1029
49
原创 【C++STL】priority_queue 模拟实现与仿函数实战
文章摘要: 优先级队列(priority_queue)是一种基于堆结构的数据结构,元素按优先级排序而非严格FIFO/LIFO规则。本文详细介绍了优先级队列的使用方法,包括构造、push/pop等核心接口实现。重点讲解了模拟实现过程:1)采用vector作为底层容器;2)通过向上/向下调整算法维护堆结构;3)引入仿函数控制排序规则。文章结合代码示例演示了优先级队列的迭代器构造、元素插入删除等关键操作,帮助读者深入理解其底层实现原理。 (字数:150字)
2025-11-18 20:34:50
1092
74
原创 【C++STL】入门不迷路:容器适配器 + deque+stack/queue 使用 + 模拟实现指南!
本文介绍了C++中栈(stack)和队列(queue)的使用方法,并通过模拟实现揭示了其底层容器适配器的原理。主要内容包括: 栈和队列的基本操作接口及其功能说明,如push、pop、top等; 通过容器适配器实现stack和queue的思想,即利用现有容器(如vector、deque)封装特定功能; stack的模拟实现代码示例,展示如何通过vector适配实现栈的后进先出特性。 文章指出容器适配器通过封装底层容器提供特定接口,本身不直接存储数据,而是改造底层容器功能。模拟实现的stack本质上仍是vect
2025-11-09 13:02:40
1498
81
原创 【C++STL】以为 list 很简单?拆完它的 “骨架” 才发现,这货藏了这么多 “小心机”(附实现)
本文深入解析了list的模拟实现,重点介绍了三个核心组成部分:结点结构、迭代器实现和链表整体架构。通过源码分析展示了list与顺序容器的本质区别,并详细讲解了自定义迭代器的封装原理。文章还提供了完整的代码实现,包括结点定义、多模板参数迭代器封装以及链表基本框架,帮助读者理解STL中list的底层设计思路和实现机制。
2025-11-02 21:09:37
1090
93
原创 【C++STL】被 List 接口的各种方法搞晕了?关键核心就这几个!
本文拆解 List 核心接口的功能、用法与示例,点出新手常见误区,帮你快速掌握列表高频操作,看完就能用。
2025-10-26 22:28:27
1244
98
原创 【C++ STL】探索STL的奥秘——vector底层的深度剖析和模拟实现!
本文聚焦 C++ vector 核心技术,拆解三大关键问题:详解 vector 模拟实现的底层逻辑与核心函数编写,分析 memcpy 浅拷贝在 vector 场景中的隐患及解决办法,梳理迭代器失效的常见场景与规避技巧,为开发者提供实用技术参考。
2025-10-24 18:51:22
1421
99
原创 【C++STL】新手也能会:string 模拟实现保姆级指南!
想理解 C++ 面向对象封装?从模拟实现 string 开始!本文覆盖构造、拷贝构造、赋值重载等核心功能,解析空字符串处理、内存扩容细节,附完整可运行代码,帮你夯实 C++ 基础。
2025-10-13 22:28:50
1073
91
原创 【C++STL】一文掌握 String 核心接口:从基础到实用!
String 接口是字符串处理的关键,本文聚焦常见接口,用简洁内容带你掌握实用技巧,告别操作难题。
2025-10-07 17:12:27
1300
77
原创 【C++】模板初阶入门:什么是模板?怎么用?这篇文章帮你打通 “第一关”
C++ 模板入门专属!拆解函数 / 类模板核心用法,附直观代码示例,帮新手避开编译、类型匹配误区,快速掌握模板基础,为泛型编程打基础。
2025-10-01 21:37:26
1412
75
原创 【C++】C++入门——(上)
C++ 是一种通用编程语言,由 Bjarne Stroustrup 于 1985 年在贝尔实验室开发。它是对 C 语言的扩展,引入了面向对象编程(OOP)特性,同时保留了对底层硬件的直接操作能力。面向对象:支持类、继承、多态和封装。高性能:允许直接内存操作,适合系统级开发。泛型编程:通过模板实现代码复用。标准库:提供丰富的容器、算法和输入输出功能。以上就是C++的介绍,要想学好一门语言就要先从其语法开始学习,下面就来介绍一下C++的语法。
2025-08-29 12:09:31
1920
27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅