<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[C_Liu_的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/C_Liu_</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; C_Liu_]]></copyright><item><title><![CDATA[19、C++：哈希表的实现]]></title><link>https://blog.youkuaiyun.com/C_Liu_/article/details/157260755</link><guid>https://blog.youkuaiyun.com/C_Liu_/article/details/157260755</guid><author>C_Liu_</author><pubDate>Tue, 10 Feb 2026 20:49:56 +0800</pubDate><description><![CDATA[哈希表是一种高效的数据结构，通过哈希函数将关键字映射到存储位置实现O(1)时间复杂度查找。文章介绍了哈希表的基本原理、常见哈希函数构造方法（如除留余数法）以及处理哈希冲突的两种主要方式：开放定址法和链地址法（哈希桶）。重点讲解了用C++实现哈希桶的具体步骤，包括节点结构设计、插入、查找和删除操作实现，以及扩容机制的处理。通过将不同类型数据转换为整型的哈希函数特化，实现了通用哈希表模板。测试代码验证了哈希表的基本功能，为理解哈希表工作原理和实现提供了实用参考。]]></description><category></category></item><item><title><![CDATA[18.C++：封装红黑树实现 map 和 set]]></title><link>https://blog.youkuaiyun.com/C_Liu_/article/details/155129254</link><guid>https://blog.youkuaiyun.com/C_Liu_/article/details/155129254</guid><author>C_Liu_</author><pubDate>Sat, 22 Nov 2025 17:16:25 +0800</pubDate><description><![CDATA[本文详细介绍了如何基于红黑树模拟实现C++ STL中的map和set容器。主要内容包括：1. 分析STL源码中map和set的实现原理；2. 设计红黑树节点结构和基础框架，支持插入操作；3. 实现迭代器功能，包括operator++和operator--等运算符重载；4. 通过仿函数解决map和set在比较键值时的差异问题；5. 给出完整的红黑树模板类实现代码，以及基于该模板的map和set容器实现。文章重点讲解了迭代器的实现原理和各种遍历场景的处理方法，最后提供了完整的头文件实现(mytree.h、mys]]></description><category></category></item><item><title><![CDATA[17.C++：红黑树的实现]]></title><link>https://blog.youkuaiyun.com/C_Liu_/article/details/154903527</link><guid>https://blog.youkuaiyun.com/C_Liu_/article/details/154903527</guid><author>C_Liu_</author><pubDate>Sat, 22 Nov 2025 10:30:17 +0800</pubDate><description><![CDATA[红黑树是一种自平衡二叉搜索树，通过节点着色规则（红/黑）和旋转操作保持近似平衡。其核心规则包括：根节点为黑、红节点的子节点必须为黑、任意路径黑节点数相同。这些规则确保最长路径不超过最短路径的2倍，保证查找效率为O(logN)。插入操作分为三种情况处理：变色、单旋变色和双旋变色。实现时需维护节点颜色和父子指针，通过递归检查确保符合红黑树特性。该数据结构在插入和查找时都具有较高的效率，适用于需要频繁插入和查找的场景。]]></description><category></category></item><item><title><![CDATA[16、C++：AVL树]]></title><link>https://blog.youkuaiyun.com/C_Liu_/article/details/154799865</link><guid>https://blog.youkuaiyun.com/C_Liu_/article/details/154799865</guid><author>C_Liu_</author><pubDate>Sun, 16 Nov 2025 10:20:33 +0800</pubDate><description><![CDATA[AVL树是一种高度平衡的二叉搜索树，其左右子树高度差的绝对值不超过1。本文详细介绍了AVL树的实现原理：1. 节点结构包含平衡因子(bf)记录左右子树高度差；2. 插入操作分为三步：按BST规则插入、更新平衡因子、必要时通过旋转调整结构；3. 重点讲解了四种旋转操作（左单旋、右单旋、左右双旋、右左双旋）及其实现代码；4. 分析了不同情况下平衡因子的更新规则和旋转条件。AVL树通过严格的平衡控制，将查找效率保持在O(logN)，适用于需要高效查找的场景。]]></description><category></category></item><item><title><![CDATA[15.C++：map 和 set 的使用]]></title><link>https://blog.youkuaiyun.com/C_Liu_/article/details/154570385</link><guid>https://blog.youkuaiyun.com/C_Liu_/article/details/154570385</guid><author>C_Liu_</author><pubDate>Wed, 12 Nov 2025 14:19:43 +0800</pubDate><description><![CDATA[Note：（1）T 为 set底层关键字 key 的类型；（2）Compare 为仿函数，比较大小用的；（3）set 的底层存储数据的内存是从空间配置器申请的，如果需要可以用自己实现的内存池，传给第三个参数；（4）set 底层用红黑树实现，增删查的效率为 O(logN)；（5）迭代器遍历走的中序。]]></description><category></category></item><item><title><![CDATA[14：C++：二叉搜索树]]></title><link>https://blog.youkuaiyun.com/C_Liu_/article/details/154408362</link><guid>https://blog.youkuaiyun.com/C_Liu_/article/details/154408362</guid><author>C_Liu_</author><pubDate>Thu, 06 Nov 2025 19:14:15 +0800</pubDate><description><![CDATA[本文介绍了二叉搜索树(BST)的基本概念与实现。二叉搜索树具有左子树值≤根节点≤右子树值的特性。其查找性能为O(logN)最优至O(N)最坏。文章详细阐述了BST的节点结构设计(key-value对)，并给出了插入(避免重复)、查找和删除三种核心操作的代码实现。删除操作根据不同情况(无子节点、单个子节点、双子节点)采用不同处理策略，其中双子节点情况需寻找替代节点(右子树最小值或左子树最大值)来保持BST结构特性。全文通过代码示例展示了BST的具体实现方法。]]></description><category></category></item><item><title><![CDATA[13.C++：多态]]></title><link>https://blog.youkuaiyun.com/C_Liu_/article/details/154282822</link><guid>https://blog.youkuaiyun.com/C_Liu_/article/details/154282822</guid><author>C_Liu_</author><pubDate>Sun, 02 Nov 2025 16:42:42 +0800</pubDate><description><![CDATA[本文通过&quot;吃午饭&quot;的生动例子，介绍了C++多态的概念与实现。多态分为静态多态（函数重载）和动态多态（运行时确定）。实现多态需要两个条件：使用基类指针/引用调用虚函数，并且完成虚函数重写。文章详细讲解了虚函数、虚函数表、重写规则、override/final关键字的使用，以及纯虚函数和抽象类。通过剖析虚函数表指针的工作原理，揭示了多态底层实现的原理：派生类虚表指向重写的虚函数地址，在运行时动态绑定。最后对比了重载、重写和隐藏的区别，帮助读者全面理解C++多态机制。]]></description><category></category></item><item><title><![CDATA[13.C++：继承]]></title><link>https://blog.youkuaiyun.com/C_Liu_/article/details/154242675</link><guid>https://blog.youkuaiyun.com/C_Liu_/article/details/154242675</guid><author>C_Liu_</author><pubDate>Sun, 02 Nov 2025 11:23:39 +0800</pubDate><description><![CDATA[本文详细介绍了C++面向对象编程中的继承机制。文章首先通过类比的引入继承的概念，解释了基类和派生类的关系。重点阐述了继承的三种方式（public/protected/private）及其访问权限变化，以及继承中的特殊规则：隐藏规则、派生类默认成员函数调用顺序等。同时探讨了友元与继承、静态成员在继承体系中的特性。针对多继承带来的菱形继承问题，提出了虚继承的解决方案。最后对比了继承与组合的差异，建议优先使用组合。文章通过丰富的代码示例和练习题，系统地讲解了C++继承的核心知识点和使用技巧。]]></description><category></category></item><item><title><![CDATA[12.C++：模版进阶]]></title><link>https://blog.youkuaiyun.com/C_Liu_/article/details/154240322</link><guid>https://blog.youkuaiyun.com/C_Liu_/article/details/154240322</guid><author>C_Liu_</author><pubDate>Sat, 01 Nov 2025 16:06:26 +0800</pubDate><description><![CDATA[本文探讨了C++模板编程的几个关键方面：1）非类型模板参数及其限制（仅支持整型且需编译期确定）；2）模板特化的两种形式：函数模板特化（需与原模板参数类型匹配）和类模板特化（分为全特化和偏特化）；3）模板分离编译问题及解决方案（显示实例化但不推荐）；4）模板的优缺点（泛型编程优势vs编译错误难查、代码膨胀）。文章特别强调模板定义与声明应放在同一文件中以避免分离编译问题。]]></description><category></category></item><item><title><![CDATA[215.数组中第k个最大元素]]></title><link>https://blog.youkuaiyun.com/C_Liu_/article/details/153980694</link><guid>https://blog.youkuaiyun.com/C_Liu_/article/details/153980694</guid><author>C_Liu_</author><pubDate>Sat, 01 Nov 2025 13:47:32 +0800</pubDate><description><![CDATA[Note：hoare找基准值，left向又走，寻找比基准值大的数，right向左走，寻找比基准值小的数，如果在 left > right之前找到，那么 left 和 right交换，然后right在和基准值交换。知道你不懂，别急，先来回顾一下快速排序的核心思想吧：对一个序列找基准值，小于基准值的放一边，大于基准值的放另一边，然后再在两边分别找新的基准值，以此类推。而我们要做的就是在每次基准值确定位置之后和 k -1作比较，如果小了，证明我们要找的数在右边，就继续在右边找基准值，反之，在左边找。]]></description><category></category></item><item><title><![CDATA[C++：stack 和 queue]]></title><link>https://blog.youkuaiyun.com/C_Liu_/article/details/154155201</link><guid>https://blog.youkuaiyun.com/C_Liu_/article/details/154155201</guid><author>C_Liu_</author><pubDate>Sat, 01 Nov 2025 13:02:55 +0800</pubDate><description><![CDATA[本文主要介绍了C++中stack、queue、deque和priority_queue的使用与模拟实现。首先讲解了stack的基本用法及经典题目如最小栈、逆波兰表达式等，随后介绍了queue的使用及其在二叉树层次遍历中的应用。接着对比了list和vector的优缺点，引出双端队列deque的设计原理。最后深入剖析了优先级队列priority_queue的实现，重点讲解了堆的调整算法和仿函数机制。文章通过大量力扣真题演示了这些容器的实际应用，并给出了完整的模拟实现代码，帮助读者深入理解这些常用数据结构的底层原]]></description><category></category></item><item><title><![CDATA[155.最小栈]]></title><link>https://blog.youkuaiyun.com/C_Liu_/article/details/153942498</link><guid>https://blog.youkuaiyun.com/C_Liu_/article/details/153942498</guid><author>C_Liu_</author><pubDate>Sun, 26 Oct 2025 23:55:38 +0800</pubDate><description><![CDATA[当第一个数据入栈，那肯定要给两个栈都入栈。后面入栈的时候，根 _min_st 的栈顶比较，如果小，就给 _min_st  和 _st 都入栈，否则，只给 _st 入栈；出栈的时候，就判断 _st 的栈顶是否根 _min_st 的栈顶一致，一致，两个就都出栈。第一次入栈的时候，就给 min 存放，后面每次入栈时都比较一下，如果比 min 还小，min 就存放新的值。题目要求我们设计一个栈，其他的都还好说，C++已经提供好了 stack ，唯一需要我们解决的就是获取栈中最小的数。]]></description><category></category></item><item><title><![CDATA[Linux 的基本操作指令]]></title><link>https://blog.youkuaiyun.com/C_Liu_/article/details/153705842</link><guid>https://blog.youkuaiyun.com/C_Liu_/article/details/153705842</guid><author>C_Liu_</author><pubDate>Sun, 26 Oct 2025 19:47:13 +0800</pubDate><description><![CDATA[本文介绍了Linux系统的基础知识和常用指令。首先概述了Linux系统的特点和发展历史，并推荐初学者使用Ubuntu发行版。然后详细讲解了文件路径、目录结构、文件类型等基础概念，强调&quot;Linux下一切皆文件&quot;的特性。重点整理了30多个常用指令的用法和参数选项，包括文件操作、权限管理、压缩解压等。最后深入解析了Linux权限系统，包括用户角色划分、权限修改方法、目录权限设置等，特别介绍了粘滞位的应用场景。文章内容详实系统，可作为Linux初学者的入门指南，帮助读者快速掌握Linux系统的基]]></description><category></category></item><item><title><![CDATA[C++：list ]]></title><link>https://blog.youkuaiyun.com/C_Liu_/article/details/153421008</link><guid>https://blog.youkuaiyun.com/C_Liu_/article/details/153421008</guid><author>C_Liu_</author><pubDate>Sun, 19 Oct 2025 10:47:48 +0800</pubDate><description><![CDATA[list 可以理解为一个带头双向循环链表。使用的时候需要包含头文件 <list>在命名空间 std 内list 是标准模板库里的重要内容，通过之前 string、vector、的学习，list 的学习就显得非常简单了，包括后面的一些 STL 也是，但是，每个 STL 都有其独特的地方，还需要我们继续深入。]]></description><category></category></item><item><title><![CDATA[C++：vector]]></title><link>https://blog.youkuaiyun.com/C_Liu_/article/details/152650991</link><guid>https://blog.youkuaiyun.com/C_Liu_/article/details/152650991</guid><author>C_Liu_</author><pubDate>Wed, 15 Oct 2025 00:05:13 +0800</pubDate><description><![CDATA[在C++中，vector是标准模板库（STL）中的一个动态数组容器。其实vector就是一个会自己管理大小的智能数组，你用的时候只管往里面放东西，它会自动处理所有内存问题！可以认为是比C语言的malloc更加高级的存在。在使用 vector 必须包含头文件 <vector>  ，并且 vector 是位于命名空间 std 内的。vector 本质上是一个模版，使用时需要指定类型。]]></description><category></category></item><item><title><![CDATA[17. 电话号码的字母组合（有动画演示）]]></title><link>https://blog.youkuaiyun.com/C_Liu_/article/details/153183643</link><guid>https://blog.youkuaiyun.com/C_Liu_/article/details/153183643</guid><author>C_Liu_</author><pubDate>Mon, 13 Oct 2025 12:32:55 +0800</pubDate><description><![CDATA[给定一个仅包含数字2-9的字符串，返回所有它能表示的字母组合。答案可以按返回。给出数字到字母的映射如下（与电话按键相同）。注意 1 不对应任何字母。]]></description><category></category></item><item><title><![CDATA[JZ39 数组中出现次数超过一半的数字]]></title><link>https://blog.youkuaiyun.com/C_Liu_/article/details/153079095</link><guid>https://blog.youkuaiyun.com/C_Liu_/article/details/153079095</guid><author>C_Liu_</author><pubDate>Sun, 12 Oct 2025 00:01:15 +0800</pubDate><description><![CDATA[给一个长度为 n 的数组，数组中有一个数字出现的次数超过数组长度的一半，请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次，超过数组长度的一半，因此输出2。数据范围：n≤50000n≤50000，数组中元素的值 0≤val≤100000≤val≤10000要求：空间复杂度：O(1)O(1)，时间复杂度 O(n)O(n)]]></description><category></category></item><item><title><![CDATA[260. 只出现一次的数字 III]]></title><link>https://blog.youkuaiyun.com/C_Liu_/article/details/152971810</link><guid>https://blog.youkuaiyun.com/C_Liu_/article/details/152971810</guid><author>C_Liu_</author><pubDate>Sat, 11 Oct 2025 16:29:30 +0800</pubDate><description><![CDATA[给你一个整数数组nums，其中恰好有两个元素只出现一次，其余所有元素均出现两次。找出只出现一次的那两个元素。你可以按返回答案。你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。以上就是这道题目的全部条件，下面我来为大家讲解。]]></description><category></category></item><item><title><![CDATA[C++：string 类]]></title><link>https://blog.youkuaiyun.com/C_Liu_/article/details/152004953</link><guid>https://blog.youkuaiyun.com/C_Liu_/article/details/152004953</guid><author>C_Liu_</author><pubDate>Sun, 05 Oct 2025 11:30:11 +0800</pubDate><description><![CDATA[string类用来管理程序中的字符串，出现的时间比STL要早，SLT很多内容都是参考的string，后面STL成熟了，string也有些内容是参考STL修改的。在C语言中，用数组存放字符串，我们需要担心是否越界，需要手动扩容和释放。但在C++中，我们有string类，它可以帮助我们完成这些事情，节省程序员的精力。使用string类是需要头文件的：<string>，同时也是有命名空间的 ：std。]]></description><category></category></item><item><title><![CDATA[C++：内存管理]]></title><link>https://blog.youkuaiyun.com/C_Liu_/article/details/151766464</link><guid>https://blog.youkuaiyun.com/C_Liu_/article/details/151766464</guid><author>C_Liu_</author><pubDate>Wed, 17 Sep 2025 18:00:03 +0800</pubDate><description><![CDATA[new 和 delete]]></description><category></category></item></channel></rss>