<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[JYY97409的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/JYY97409</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; JYY97409]]></copyright><item><title><![CDATA[Linux系统篇（三十三）深入理解EXT2文件系统：块组、inode、目录与链接机制详解]]></title><link>https://blog.youkuaiyun.com/JYY97409/article/details/164336595</link><guid>https://blog.youkuaiyun.com/JYY97409/article/details/164336595</guid><author>JYY97409</author><pubDate>Thu, 10 Sep 2026 22:16:17 +0800</pubDate><description><![CDATA[本文深入解析EXT2文件系统，从磁盘分区与块设备出发，详解块组（Block Group）的布局结构。通过数据块、inode表、位图及超级块等核心组件，揭示文件系统如何管理空间与文件元信息。重点剖析inode与数据块的多级索引映射机制，实现高效寻址，并阐明“属性与内容分离”的设计思想，全面展现EXT2在存储组织上的精妙逻辑。]]></description><category></category></item><item><title><![CDATA[C++11新特性（3）：lambda不是玄学：从编译器生成的仿函数类彻底搞懂 C++ 匿名函数]]></title><link>https://blog.youkuaiyun.com/JYY97409/article/details/160567037</link><guid>https://blog.youkuaiyun.com/JYY97409/article/details/160567037</guid><author>JYY97409</author><pubDate>Mon, 27 Apr 2026 22:54:50 +0800</pubDate><description><![CDATA[本文详细解析了C++11中的lambda表达式特性。lambda本质是编译器生成的匿名函数对象，可以定义在函数内部。其语法包含捕捉列表、参数列表、返回值类型和函数体四部分，其中捕捉列表不可省略，支持显式/隐式/混合三种捕捉方式。通过mutable关键字可修改值捕获的变量。底层实现上，每个lambda会被转换为一个具有唯一UUID的仿函数类，捕获变量成为成员变量，函数体转为operator()。lambda调用时直接执行该operator()，效率与普通函数相当。最后提出lambda类型不明确导致难以存入容器]]></description><category></category></item><item><title><![CDATA[C++11新特性（2）：深入 C++ 参数传递黑盒：从引用折叠到完美转发，再到可变参数模板]]></title><link>https://blog.youkuaiyun.com/JYY97409/article/details/160531017</link><guid>https://blog.youkuaiyun.com/JYY97409/article/details/160531017</guid><author>JYY97409</author><pubDate>Sun, 26 Apr 2026 22:06:31 +0800</pubDate><description><![CDATA[C++11参数传递黑盒解析：引用折叠与完美转发 本文深入探讨了C++11中参数传递的核心机制，重点解析了引用折叠、完美转发和可变参数模板三大特性。主要内容包括： 引用折叠规则：解释了C++11中引用折叠的运作原理，展示了模板实例化时如何通过类型推导生成左值或右值引用版本。 完美转发实现：通过forward函数模板，演示了如何保持参数原始值类别（左值/右值）进行传递，解决了参数传递过程中的值类别退化问题。 可变参数模板：介绍了模板参数包的语法和使用方法，说明了如何实现接受任意数量参数的函数模板。 这些特性共同]]></description><category></category></item><item><title><![CDATA[C++11新特性（1）：从列表初始化到右值引用]]></title><link>https://blog.youkuaiyun.com/JYY97409/article/details/160497506</link><guid>https://blog.youkuaiyun.com/JYY97409/article/details/160497506</guid><author>JYY97409</author><pubDate>Sat, 25 Apr 2026 19:26:21 +0800</pubDate><description><![CDATA[本文详细介绍了C++11的两个重要新特性：列表初始化和右值引用。在列表初始化部分，文章对比了C++98和C++11的初始化方式，展示了C++11如何通过initializer_list实现更灵活的统一初始化语法，包括对内置类型、自定义类型和容器的初始化支持。右值引用部分则深入讲解了左值/右值的区别，右值引用的基本概念和使用场景，包括如何通过右值引用绑定临时对象，以及move语义的应用。这些特性为C++带来了更高效的资源管理和更简洁的代码书写方式，是现代化C++编程的重要基础。]]></description><category></category></item><item><title><![CDATA[C++庖丁解牛：AVL 树详解：让二叉搜索树不再“歪脖子”]]></title><link>https://blog.youkuaiyun.com/JYY97409/article/details/159771245</link><guid>https://blog.youkuaiyun.com/JYY97409/article/details/159771245</guid><author>JYY97409</author><pubDate>Sat, 04 Apr 2026 15:46:37 +0800</pubDate><description><![CDATA[这篇博客详细讲解了AVL树的概念与实现。AVL树通过平衡因子（右子树高度减左子树高度，取值0/1/-1）控制左右子树高度差。文章介绍了带父指针的节点结构，便于插入后更新平衡因子。插入操作遵循二叉搜索树规则，然后根据平衡因子变化决定是否旋转：单旋（左/右）处理完全一边高场景，双旋（左右/右左）处理折线型结构，并重点说明了旋转后平衡因子的更新策略。最后提供了判断AVL树合法性的IsAVLTree函数和计算树高的Height函数。]]></description><category></category></item><item><title><![CDATA[C++庖丁解牛：深入理解多态：从虚函数表到底层实现]]></title><link>https://blog.youkuaiyun.com/JYY97409/article/details/159397061</link><guid>https://blog.youkuaiyun.com/JYY97409/article/details/159397061</guid><author>JYY97409</author><pubDate>Mon, 23 Mar 2026 22:52:08 +0800</pubDate><description><![CDATA[本文深入探讨了C++多态的实现机制。首先区分了编译时多态（函数重载和模板）与运行时多态（虚函数重写），指出多态的核心在于运行时确定调用函数。重点分析了虚函数表的底层实现原理，包括虚函数表指针、动态绑定过程等。通过具体示例展示了析构函数重写、override/final关键字的使用场景，并解释了纯虚函数和抽象类的特性。最后详细讲解了虚函数表的工作机制，包括继承关系中的虚函数表变化规则。全文从概念到实现层层深入，为理解C++多态提供了全面指导。]]></description><category></category></item><item><title><![CDATA[C++继承详解]]></title><link>https://blog.youkuaiyun.com/JYY97409/article/details/159316486</link><guid>https://blog.youkuaiyun.com/JYY97409/article/details/159316486</guid><author>JYY97409</author><pubDate>Sun, 22 Mar 2026 19:40:31 +0800</pubDate><description><![CDATA[本文详细介绍了C++继承的概念和使用方法。主要内容包括：1) 继承的基本概念和定义，通过Person、Student、Teacher类示例说明继承关系；2) 继承权限问题，分析了访问限定符与继承方式的区别，并给出权限变化表格；3) 继承类模板的特殊处理；4) 基类和派生类之间的转换规则；5) 继承中的作用域和隐藏规则；6) 派生类中基类对象的构造、赋值和析构的特殊处理方式。文章通过具体代码示例，深入浅出地讲解了继承中的关键知识点，为理解和使用C++继承机制提供了全面指导。]]></description><category></category></item><item><title><![CDATA[C++STL详解2:stack和queue]]></title><link>https://blog.youkuaiyun.com/JYY97409/article/details/159130015</link><guid>https://blog.youkuaiyun.com/JYY97409/article/details/159130015</guid><author>JYY97409</author><pubDate>Mon, 16 Mar 2026 22:57:57 +0800</pubDate><description><![CDATA[本文详细介绍了C++ STL中的容器适配器stack、queue和priority_queue。stack基于vector实现，遵循先进后出原则；queue基于list实现，遵循先进先出原则。重点剖析了deque的结构与特性，它结合了vector和list的优点，支持随机访问但效率略低。文章还讲解了仿函数的概念及其在priority_queue中的应用，priority_queue默认以大堆形式实现。通过代码示例展示了这些容器的基本实现方式和使用方法，帮助读者理解STL容器的底层机制和使用场景。]]></description><category></category></item><item><title><![CDATA[C++STL详解1：list]]></title><link>https://blog.youkuaiyun.com/JYY97409/article/details/159048788</link><guid>https://blog.youkuaiyun.com/JYY97409/article/details/159048788</guid><author>JYY97409</author><pubDate>Sat, 14 Mar 2026 23:06:19 +0800</pubDate><description><![CDATA[本文详细介绍了C++标准库中的list容器，主要包括以下内容： list的本质是带头双向链表，属于顺序表的一种链式实现 list迭代器属于双向迭代器，与vector的随机访问迭代器不同，不支持+=等操作 重点分析了emplace_back接口，它支持可变参数模板和隐式类型转换 分类整理了list的各种接口，特别讲解了splice接口的剪切功能 探讨了list排序的效率问题，建议先拷贝到vector排序再转回 深入剖析了list的底层实现，包括节点类、迭代器类和list本体的设计思路 详细讲解了如何通过模板参]]></description><category></category></item><item><title><![CDATA[类和对象（下）：流重载、初始化列表、友元]]></title><link>https://blog.youkuaiyun.com/JYY97409/article/details/157768945</link><guid>https://blog.youkuaiyun.com/JYY97409/article/details/157768945</guid><author>JYY97409</author><pubDate>Thu, 05 Feb 2026 20:59:26 +0800</pubDate><description><![CDATA[本文介绍了C++中类的两个重要特性：初始化列表和流重载。初始化列表是构造函数中用于初始化成员变量的专用语法，特别适用于const成员、引用成员和没有默认构造的自定义类型成员。文章详细讲解了初始化列表的使用方法、成员变量初始化顺序以及C++11新增的成员缺省值特性。在流重载部分，重点阐述了如何通过友元函数实现&lt;&lt;和&gt;&gt;运算符的重载，使自定义类型支持流式输入输出，并解释了为何重载函数需要设为全局函数而非成员函数。全文通过代码示例和原理分析，帮助读者深入理解这些核心概念。]]></description><category></category></item><item><title><![CDATA[类和对象（上）]]></title><link>https://blog.youkuaiyun.com/JYY97409/article/details/157580665</link><guid>https://blog.youkuaiyun.com/JYY97409/article/details/157580665</guid><author>JYY97409</author><pubDate>Sat, 31 Jan 2026 16:05:15 +0800</pubDate><description><![CDATA[本文介绍了C++中类和对象的基础知识，主要包括三部分内容：类的定义、实例化和this指针。在类的定义部分，讲解了命名规则、访问限定符和类域的概念，重点说明了成员变量和成员函数的区别。实例化部分阐述了类模板与实例对象的关系，分析了类对象的内存分配规则。最后详细讲解了this指针的作用机制和使用规则，揭示了编译器如何通过隐式this指针区分不同对象的成员变量。全文通过代码示例直观展示了类的基本使用方式，为理解面向对象编程奠定了基础。]]></description><category></category></item><item><title><![CDATA[类和对象（中）]]></title><link>https://blog.youkuaiyun.com/JYY97409/article/details/157554769</link><guid>https://blog.youkuaiyun.com/JYY97409/article/details/157554769</guid><author>JYY97409</author><pubDate>Sat, 31 Jan 2026 00:16:50 +0800</pubDate><description><![CDATA[本文介绍了C++中类的默认成员函数，重点讲解了构造函数、析构函数和拷贝构造函数。构造函数用于初始化成员变量，有默认、显式和拷贝三种形式；析构函数用于释放申请的空间，遵循先构造先析构原则；拷贝构造函数用于创建对象的副本，需要注意深拷贝与浅拷贝的区别。文章通过代码示例展示了这些函数的实现和使用场景，并强调了注意事项，如拷贝构造函数的参数必须为引用类型、传值返回会创建临时变量等。这些内容是理解和使用C++类的基础知识。]]></description><category></category></item><item><title><![CDATA[记数排序（基数排序和桶排序）]]></title><link>https://blog.youkuaiyun.com/JYY97409/article/details/156315570</link><guid>https://blog.youkuaiyun.com/JYY97409/article/details/156315570</guid><author>JYY97409</author><pubDate>Fri, 26 Dec 2025 23:07:21 +0800</pubDate><description><![CDATA[本文介绍了三种非比较型排序算法。记数排序通过统计元素出现次数实现排序，先确定数据范围(range)，统计各元素出现次数后重新填充原数组，时间复杂度O(N+range)，适合数据范围集中的情况。基数排序和桶排序仅简要提及未深入讲解，配图展示了这两种算法的基本思路。记数排序是本文重点，详细说明了其实现步骤和性能特点，能处理包含负数的情况，但对数据范围敏感。]]></description><category></category></item><item><title><![CDATA[快排（非递归）和归并的实现]]></title><link>https://blog.youkuaiyun.com/JYY97409/article/details/156223283</link><guid>https://blog.youkuaiyun.com/JYY97409/article/details/156223283</guid><author>JYY97409</author><pubDate>Wed, 24 Dec 2025 09:55:23 +0800</pubDate><description><![CDATA[本文介绍了两种排序算法的实现方法：快速排序的非递归版本和归并排序的递归/非递归版本。 快速排序（非递归）： 使用栈模拟递归过程，按照深度优先遍历的顺序处理子区间。先将右区间压栈再压左区间，保证处理顺序正确。时间复杂度为O(N*logN)。 归并排序： 递归版本：采用后序遍历思想，将数组不断二分直至单个元素，再逐层合并有序子数组。需额外O(N)空间存储临时数组。 非递归版本：通过gap控制合并步长，从单个元素开始两两合并。需注意处理边界条件防止越界，当右子数组超出范围时需调整边界或跳过。 两种算法的时间复杂度]]></description><category></category></item><item><title><![CDATA[直接插入排序、希尔排序、选择排序]]></title><link>https://blog.youkuaiyun.com/JYY97409/article/details/156161271</link><guid>https://blog.youkuaiyun.com/JYY97409/article/details/156161271</guid><author>JYY97409</author><pubDate>Mon, 22 Dec 2025 20:43:56 +0800</pubDate><description><![CDATA[本文介绍了三种排序算法：直接插入排序、希尔排序和选择排序。直接插入排序通过逐个插入元素实现排序，希尔排序是其改进版本，采用分组策略和动态调整增量来提高效率。选择排序则通过不断选择最小/最大值来完成排序。文章详细说明了各算法的实现原理和代码细节，包括边界条件处理，如希尔排序的动态gap调整和选择排序的特殊情况处理。这些排序算法在时间复杂度和适用场景上各有特点，为不同数据规模和应用需求提供了多样化的解决方案。]]></description><category></category></item><item><title><![CDATA[TOP-K问题]]></title><link>https://blog.youkuaiyun.com/JYY97409/article/details/156059305</link><guid>https://blog.youkuaiyun.com/JYY97409/article/details/156059305</guid><author>JYY97409</author><pubDate>Thu, 18 Dec 2025 17:39:11 +0800</pubDate><description><![CDATA[【摘要】本文介绍了top-k问题的解决方案，重点阐述了基于堆结构的实现方法。通过建立大小为k的小顶堆，依次比较数据源元素与堆顶元素，保留最大的k个元素。该方法时间复杂度为O(N)，空间复杂度为O(K)。文中还提供了C语言实现代码，包括随机数生成、文件读写、堆操作等核心功能，并展示了如何利用小顶堆查找文件中最大的k个数值。该方案适用于各类需要获取极值数据的应用场景。]]></description><category></category></item><item><title><![CDATA[堆排序的实现]]></title><link>https://blog.youkuaiyun.com/JYY97409/article/details/155948657</link><guid>https://blog.youkuaiyun.com/JYY97409/article/details/155948657</guid><author>JYY97409</author><pubDate>Thu, 18 Dec 2025 16:39:52 +0800</pubDate><description><![CDATA[本文详细讲解了堆排序的实现原理和优化方法。首先分析了向上调整和向下调整两种建堆方式的时间复杂度差异，证明向下调整算法(O(N))比向上调整(O(NlogN))更高效。然后阐述了堆排序的核心思想：升序建大堆，降序建小堆，通过不断交换堆顶元素和末尾元素并调整堆结构来完成排序。文中提供了完整的C语言实现代码，包括堆的初始化、调整、排序等核心函数，并展示了如何将数组转化为堆结构进行排序。此外还介绍了利用堆结构解决TopK问题的应用实例。]]></description><category></category></item><item><title><![CDATA[堆的实现与操作详解]]></title><link>https://blog.youkuaiyun.com/JYY97409/article/details/155950595</link><guid>https://blog.youkuaiyun.com/JYY97409/article/details/155950595</guid><author>JYY97409</author><pubDate>Mon, 15 Dec 2025 22:23:33 +0800</pubDate><description><![CDATA[本文介绍了堆数据结构的概念与实现。堆是一种完全二叉树，可以使用数组存储，通过父子节点索引关系实现高效操作。文章详细讲解了向上调整（从子节点到父节点）和向下调整（从父节点到子节点）两种核心算法，分别用于插入和删除元素时维护堆的有序性。在功能实现方面，提供了堆的创建、销毁、插入(push)和删除(pop)等操作的代码实现，其中插入操作使用向上调整算法，删除操作使用向下调整算法。所有操作都保证了堆的性质不受破坏，且时间复杂度保持在O(log n)级别。]]></description><category></category></item><item><title><![CDATA[设计循环队列]]></title><link>https://blog.youkuaiyun.com/JYY97409/article/details/155948689</link><guid>https://blog.youkuaiyun.com/JYY97409/article/details/155948689</guid><author>JYY97409</author><pubDate>Mon, 15 Dec 2025 20:11:07 +0800</pubDate><description><![CDATA[本文介绍了循环队列的设计实现方案。通过分析链表和数组两种实现方式的优劣，最终选择使用数组实现循环队列。关键点包括：1)使用_head和_tail指针标记队列首尾；2)通过多分配一个空间来区分队列满和空的状态；3)利用取模运算处理指针回转问题。文中详细说明了初始化、判空判满、获取首尾元素以及入队出队等核心操作的实现逻辑，并给出了完整的C++代码实现。这种设计保证了循环队列的高效操作，时间复杂度均为O(1)。]]></description><category></category></item><item><title><![CDATA[链表的终极考验：随机链表的复制]]></title><link>https://blog.youkuaiyun.com/JYY97409/article/details/155828230</link><guid>https://blog.youkuaiyun.com/JYY97409/article/details/155828230</guid><author>JYY97409</author><pubDate>Sat, 13 Dec 2025 19:52:35 +0800</pubDate><description><![CDATA[本文讲解LeetCode&quot;复制带随机指针的链表&quot;问题。该问题要求深拷贝一个包含next和random指针的链表，难点在于如何正确复制random指针。作者提出创新解法：1.在原链表每个节点后插入其复制节点；2.通过原节点的random指针定位复制节点的random指针；3.分离两个链表。这种方法时间复杂度O(n)，空间复杂度O(1)，巧妙地利用原链表建立映射关系，避免了额外空间开销。代码实现包含创建复制节点、设置random指针和分离链表三个主要步骤，并处理了边界条件。]]></description><category></category></item></channel></rss>