C++
文章平均质量分 96
C++
埃伊蟹黄面
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
红黑树的色彩魔法:红与黑背后的平衡艺术
红黑树是一种自平衡二叉搜索树,通过颜色约束规则确保近似平衡。相比AVL树,红黑树对平衡的控制更宽松,插入时旋转次数更少。红黑树遵循四点规则:根节点黑色、红色节点子节点必须黑色、任意路径黑色节点数相同。插入新节点时通过变色和旋转(左旋/右旋)维持平衡,主要处理父节点和叔节点的颜色情况。红黑树保证了最长路径不超过最短路径的两倍,查找、插入、删除操作的时间复杂度均为O(logN)。检查红黑树平衡需验证四条规则,包括根节点颜色、连续红色节点和路径黑节点数等。原创 2025-10-25 19:38:22 · 1056 阅读 · 0 评论 -
深入浅出哈希表
本文深入解析了C++11新增的unordered_set和unordered_map容器及其底层哈希表实现。主要内容包括:两种容器的声明差异(需要支持转换为整型和比较相等)、迭代器特性(双向vs单向)、性能比较(O(1)平均复杂度优于红黑树的O(logN))。重点讲解了哈希表的核心概念:哈希函数设计(除留余数法为主)、解决冲突方法(开放定址法和更优的链地址法),并提供了两种方法的完整代码实现,包含扩容策略(素数表扩容)、字符串特例处理等关键细节。通过性能测试数据对比,证实了哈希容器在多数场景下的高效性。原创 2025-10-29 11:22:04 · 805 阅读 · 0 评论 -
容器适配器、关联容器的相关算法题目
题目分析:设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。top和getMin操作总是在上调用pushpoptop, andgetMin最多被调用3 * 104次由题目所描述的“能在常数时间内检索到最小元素的栈”,说明时间复杂度为O(1)。“poptop和getMin操作总是在非空栈上调用”说明在执行 pop,top,getMin 操作时,不需要考虑栈为空的情况。--> 返回 -3.--> 返回 0.--> 返回 -2.算法思路。原创 2025-10-22 18:24:09 · 862 阅读 · 0 评论 -
C++容器适配器深度解析:stack/queue/priority_queue的设计哲学
本文介绍了C++中的三种容器适配器:stack(栈)、queue(队列)和priority_queue(优先队列)。stack和queue分别基于后进先出(LIFO)和先进先出(FIFO)原则,默认使用deque作为底层容器;priority_queue基于堆结构,默认使用vector作为底层容器。文章详细阐述了它们的实现原理、接口函数及模拟实现方法,并比较了不同容器的优缺点。此外,还深入探讨了deque(双端队列)的内部结构及其作为适配器底层容器的优势,最后介绍了仿函数在容器适配器中的应用。原创 2025-10-19 15:01:24 · 824 阅读 · 0 评论 -
C++实现AVL树:理解旋转操作的每一个细节
AVL树是一种自平衡二叉搜索树,通过平衡因子(右子树高度减左子树高度)确保每个节点的左右子树高度差不超过1。文章详细介绍了AVL树的结构、插入操作及平衡因子更新规则,重点讲解了四种旋转操作(左单旋、右单旋、左右双旋、右左双旋)的实现细节,包括指针调整和平衡因子更新。最后给出了检查AVL树是否平衡的方法,通过递归计算子树高度差进行验证。AVL树的平衡性保证了其查找、插入、删除等操作的时间复杂度为O(logN)。原创 2025-10-24 14:48:49 · 844 阅读 · 0 评论 -
深入理解STL关联容器:map/multimap与set/multiset全解析
本文介绍了STL中的关联式容器set、multiset、map和multimap。主要内容包括:set和map的特点和使用方法,如set的排序去重特性、map的键值对存储结构;容器常用接口如insert、erase、find、count等的功能和使用场景;重点解析了map的operator[]操作符的底层实现原理及其多功能特性;最后对比了set/multiset和map/multimap在支持数据冗余方面的差异。文章通过大量代码示例展示了这些容器的具体应用,如统计词频、遍历修改等场景。原创 2025-10-21 21:59:22 · 899 阅读 · 0 评论 -
为什么你的代码总是重复?是时候了解模板了
C++模板是泛型编程的基础,分为函数模板和类模板。函数模板通过参数类型生成特定函数,避免重复编码;类模板则创建通用类结构。模板支持隐式和显式实例化,并能特化处理特殊类型。模板声明和定义通常放在同一文件中以避免链接问题。虽然模板提高了代码复用性和灵活性,但也可能导致代码膨胀和复杂错误信息。文章详细介绍了模板的定义、使用、特化及编译分离问题,并分析了其优缺点。原创 2025-10-09 17:17:18 · 1019 阅读 · 0 评论 -
二叉搜索树的原理、实现与性能分析
【摘要】二叉搜索树是一种特殊的二叉树结构,左子树节点值均小于等于根节点,右子树节点值均大于等于根节点。文章详细介绍了二叉搜索树的基本性质、时间复杂度(最优O(logN),最差O(N))、插入/查找/删除操作的实现方法,以及key/value二叉搜索树的扩展应用。重点讲解了删除操作的四种情况处理,特别是左右孩子都不为空时的替换法删除策略,并提供了完整的C++代码实现。最后展示了key/value二叉搜索树在统计词频中的实际应用案例。该结构是map/set等STL容器的基础实现方式。原创 2025-10-17 09:32:13 · 687 阅读 · 0 评论 -
Effective C++:关于继承,你需要知道的几件事
面向对象程序设计的三大特性分别为:封装,继承,多态。使用继承可以定义相似的类型并对其相似关系建模。继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许我们在保持原有类特性的基础上进行扩展,增加方法(成员函数)和属性(成员变量)。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的函数层次的复用,继承是类设计层次的复用。继承public:{}{}private:// 姓名// 地址// 电话int m_age;原创 2025-10-12 17:46:32 · 825 阅读 · 0 评论 -
多态:C++面向对象编程的“灵魂”所在
文章摘要:本文深入探讨了C++中多态的实现原理。多态分为编译时多态(函数重载)和运行时多态(虚函数机制)。重点分析了运行时多态的两个必要条件:基类指针/引用调用虚函数,以及派生类必须重写虚函数。通过实例演示了虚函数表的工作机制,解释了虚函数指针如何实现动态绑定。文章还详细讨论了虚函数重写的特殊情况(如协变、析构函数重写)、override和final关键字的使用,以及纯虚函数和抽象类的关系。最后通过内存分析验证了虚函数表存储在只读数据段的特性。原创 2025-10-14 21:54:45 · 688 阅读 · 0 评论 -
造轮子的艺术:实现一个简易的 list 容器
如这般将 const _list_iterator<T> 重命名为 const_iterator,这样就变成本身不能被修改,反而指向的内容可以被修改,这样迭代器就不能++了,这样如何迭代?在实现 push_back 函数时,新建结点,将 val 传给 list_node 类中的构造函数,接下来就来实现该函数,参数给全缺省值,那么缺省值是什么?迭代器实现完毕后,在 list 中实现迭代器相关的函数:普通版本迭代器的 begin 和 end 函数,const 版本迭代器的 begin 和 end 函数。原创 2025-09-21 21:36:48 · 781 阅读 · 0 评论 -
链表在STL中的实现:std::list的深度剖析与使用模式
list 中使用的函数与之前所学的,并无太多的区别,下面只简单的讲解一些特殊的地方。List 是链表,是之前数据结构所说的带头双向循环链表,使用 list 时需要包含头文件 --- list。原型为:。原创 2025-09-21 10:56:54 · 1014 阅读 · 0 评论 -
面向对象编程基石:类与对象完全解析
本文详细解析了C++中类和对象的核心概念。类通过访问限定符(public/private/protected)控制成员的可访问性,成员变量通常设为私有,成员函数设为公有。类实例化对象时仅分配成员变量空间,不存储成员函数指针,成员函数存放在代码段。类的大小仅由成员变量决定,遵循内存对齐规则。文章还对比了class和struct的区别,并演示了内联成员函数的特性,全面阐述了面向对象编程的基础知识。原创 2025-05-07 20:13:40 · 1057 阅读 · 0 评论 -
vector的内部机制揭秘:通过源代码级实现理解其工作原理
相较于 string ,vector 相当于一个简洁版的 string ,它们两个容器的函数的功能都一致,只是在函数参数上略有差异。尽管如此,vector 还是存在一些自身的特点,这些会在模拟实现的同时一一介绍;vector 的许多函数的实现都与 string 差不多,所以实现起来会更简单。原创 2025-06-24 19:17:09 · 1104 阅读 · 0 评论 -
手把手教你实现C++ string类:从骨架搭建到功能完善
了解 string 的各个常用的接口之后,可以尝试模拟实现 string 类。模拟实现string 类并不是为了实现一个与库中一样的 string ,而是为了让我们更好的了解 string 类的底层,在之后使用 string 类出现错误时,能快速的找到问题,并解决问题,同时能够加深对 C++ 知识的掌握。这里的模拟实现函数的声明与定义分离。在模拟实现的过程中,为了避免命名冲突的问题,三个文件中都可以使用关键字 namespace。原创 2025-06-13 21:34:03 · 1211 阅读 · 0 评论 -
C++ STL string类详解与最佳实践
本文详细介绍了C++ string类的常用成员函数和非成员函数。原创 2025-06-01 21:15:05 · 1328 阅读 · 0 评论 -
C++基本知识 —— 缺省参数·函数重载·引用
底层指针与引用之间的区别:从指令汇编角度来看,原创 2025-05-11 21:04:01 · 1243 阅读 · 0 评论
分享