<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[chengO_o的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/chengO_o</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; chengO_o]]></copyright><item><title><![CDATA[红黑树（Red-Black Tree）实现原理详解]]></title><link>https://blog.youkuaiyun.com/chengO_o/article/details/161581768</link><guid>https://blog.youkuaiyun.com/chengO_o/article/details/161581768</guid><author>chengO_o</author><pubDate>Tue, 02 Jun 2026 10:59:05 +0800</pubDate><description><![CDATA[红黑树是一种近似平衡的二叉搜索树，通过颜色约束（根黑、红结不连续、路径黑数相同）保证最长路径不超过最短2倍。插入时新节点初始为红，通过变色和旋转（单旋/双旋）调整平衡，时间复杂度保持O(logN)。相比AVL树，红黑树旋转次数更少，广泛应用于C++ STL、Java集合和Linux内核等场景。其核心实现包括节点颜色标记、插入规则处理（分三种情况）和旋转操作，确保在动态更新中维持近似平衡特性。]]></description><category></category></item><item><title><![CDATA[AVL树详解与实现（C++）]]></title><link>https://blog.youkuaiyun.com/chengO_o/article/details/161445620</link><guid>https://blog.youkuaiyun.com/chengO_o/article/details/161445620</guid><author>chengO_o</author><pubDate>Wed, 27 May 2026 19:06:53 +0800</pubDate><description><![CDATA[AVL树是一种自平衡二叉搜索树，通过平衡因子（左右子树高度差不超过1）确保高效查找。插入节点时需先按二叉搜索树规则插入，再更新平衡因子。当平衡因子超过±1时，通过四种旋转（右单旋、左单旋、左右双旋、右左双旋）恢复平衡。旋转操作能降低子树高度并保持平衡，确保树的高度始终为O(log n)。具体旋转类型的选择取决于插入位置导致的子树不平衡情况。]]></description><category></category></item><item><title><![CDATA[STL关联式容器：map 与 set 的使用]]></title><link>https://blog.youkuaiyun.com/chengO_o/article/details/161419860</link><guid>https://blog.youkuaiyun.com/chengO_o/article/details/161419860</guid><author>chengO_o</author><pubDate>Tue, 26 May 2026 19:53:05 +0800</pubDate><description><![CDATA[STL容器分为序列式容器（如vector、list）和关联式容器（如set、map）。序列式容器按顺序存储数据，支持位置访问；关联式容器基于键值组织数据，通常使用红黑树实现，查找效率为O(logN)。set自动去重排序，map存储key-value对且key唯一。multiset/multimap允许重复元素。map支持[]操作符访问元素，set/map常用操作包括插入、查找、删除和遍历。关联式容器通过lower_bound/upper_bound实现范围查询，迭代器操作需注意失效问题。]]></description><category></category></item><item><title><![CDATA[二叉搜索树（BST）详解]]></title><link>https://blog.youkuaiyun.com/chengO_o/article/details/161258829</link><guid>https://blog.youkuaiyun.com/chengO_o/article/details/161258829</guid><author>chengO_o</author><pubDate>Fri, 22 May 2026 21:07:48 +0800</pubDate><description><![CDATA[二叉搜索树（BST）是一种特殊的二叉树结构，具有左子树节点值小于根节点、右子树节点值大于根节点的特性。其优势在于高效的查找、插入和删除操作，时间复杂度最优可达O(logN)，但最坏情况下会退化为链表结构（O(N)）。BST的中序遍历结果必然有序，插入和查找操作遵循比较规则，而删除操作最为复杂，需处理四种不同情况（叶子节点、单子树节点、双子树节点）。BST可分为key型和key/value型，分别对应set和map的应用场景。相比二分查找，BST在插入删除效率上更优且无需连续存储空间，但稳定性较差，后续可通过]]></description><category></category></item><item><title><![CDATA[C++ 多态详解（Polymorphism）]]></title><link>https://blog.youkuaiyun.com/chengO_o/article/details/161240526</link><guid>https://blog.youkuaiyun.com/chengO_o/article/details/161240526</guid><author>chengO_o</author><pubDate>Wed, 20 May 2026 15:27:42 +0800</pubDate><description><![CDATA[摘要：C++多态分为编译时多态（函数重载/模板）和运行时多态（虚函数）。实现运行时多态需满足：通过基类指针/引用调用虚函数，且派生类完成虚函数重写。虚函数重写要求函数名、参数、返回值相同，但默认参数值不参与重写。建议将基类析构函数声明为虚函数以避免内存泄漏。C++11引入override检查重写正确性，final禁止继续重写。纯虚函数（=0）使类成为抽象类，不可实例化且派生类必须重写。虚函数通过虚表实现动态绑定，每个含虚函数的类都有虚表，同类型对象共享虚表，派生类覆盖虚表中的函数地址。]]></description><category></category></item><item><title><![CDATA[C++继承详解]]></title><link>https://blog.youkuaiyun.com/chengO_o/article/details/161220505</link><guid>https://blog.youkuaiyun.com/chengO_o/article/details/161220505</guid><author>chengO_o</author><pubDate>Tue, 19 May 2026 20:23:27 +0800</pubDate><description><![CDATA[本文系统介绍了C++继承机制的核心概念与应用。主要内容包括：继承的基本语法（父类定义、子类派生）、三种继承方式（public/protected/private）及其访问规则，重点分析了public继承的is-a关系。详细讲解了继承中的构造函数、拷贝构造、赋值运算符和析构函数的调用顺序与实现要点，以及作用域隐藏、静态成员处理等特性。针对菱形继承问题，介绍了虚继承解决方案。最后对比了继承（is-a）与组合（has-a）的适用场景，建议优先使用组合以降低耦合度。全文通过代码示例阐释了继承体系中的关键技术和最佳实]]></description><category></category></item><item><title><![CDATA[C++模板进阶]]></title><link>https://blog.youkuaiyun.com/chengO_o/article/details/161211595</link><guid>https://blog.youkuaiyun.com/chengO_o/article/details/161211595</guid><author>chengO_o</author><pubDate>Tue, 19 May 2026 12:03:56 +0800</pubDate><description><![CDATA[C++模板进阶：非类型参数与特化技巧 本文深入探讨C++模板的两个高级特性：非类型模板参数和模板特化。非类型参数允许使用编译期常量作为模板参数，但需注意必须是整型/枚举类型且为常量表达式。模板特化分为函数特化和类特化，后者又包含全特化和偏特化，用于处理特定类型的特殊需求。文章通过日期类比较等实例，展示了指针特化的实际应用，并分析了模板分离编译问题的根源及解决方案（推荐将声明定义统一放在.hpp文件中）。这些技巧能有效提升模板的灵活性和适用性，但需谨慎使用以避免复杂性。]]></description><category></category></item><item><title><![CDATA[STL——stack、queue 与 priority_queue 详解]]></title><link>https://blog.youkuaiyun.com/chengO_o/article/details/161189426</link><guid>https://blog.youkuaiyun.com/chengO_o/article/details/161189426</guid><author>chengO_o</author><pubDate>Mon, 18 May 2026 17:48:31 +0800</pubDate><description><![CDATA[本文介绍了STL中的三种容器适配器：stack、queue和priority_queue。stack是后进先出(LIFO)结构，queue是先进先出(FIFO)结构，priority_queue本质是堆结构。文章详细说明了它们的概念、常用接口函数及基本使用方法，并展示了如何用vector和list分别模拟实现stack和queue。此外，还介绍了双端队列deque的特点、优缺点，以及priority_queue的大小堆实现方式。这些容器适配器通过封装底层容器提供特定功能，是STL中重要的数据结构组件。]]></description><category></category></item><item><title><![CDATA[C++ STL——list 容器详解]]></title><link>https://blog.youkuaiyun.com/chengO_o/article/details/161184604</link><guid>https://blog.youkuaiyun.com/chengO_o/article/details/161184604</guid><author>chengO_o</author><pubDate>Mon, 18 May 2026 12:01:55 +0800</pubDate><description><![CDATA[摘要：C++ STL中的list是一个基于双向循环链表的序列容器，擅长频繁插入删除操作。其特点包括任意位置高效插入删除，但随机访问效率低。list提供多种构造方式，使用双向迭代器访问元素。主要操作包括push/pop_front/back、insert、erase等，并内置sort排序功能。与vector不同，list不支持随机访问迭代器操作，因此不能直接使用算法库的sort函数，而是通过成员函数sort实现排序。]]></description><category></category></item><item><title><![CDATA[C++ STL容器--vector详解]]></title><link>https://blog.youkuaiyun.com/chengO_o/article/details/161113871</link><guid>https://blog.youkuaiyun.com/chengO_o/article/details/161113871</guid><author>chengO_o</author><pubDate>Fri, 15 May 2026 18:51:52 +0800</pubDate><description><![CDATA[本文系统介绍了C++ STL中的vector容器。主要内容包括：vector是动态顺序表，支持随机访问和动态扩容；详细讲解了构造方式（无参、拷贝、迭代器区间等）、迭代器遍历方法（begin/end、范围for）和容量操作（size/resize/reserve）；分析了VS和g++下的不同扩容机制（1.5倍vs 2倍）；列举了增删查改常用接口（push_back/insert/erase等）；重点阐述了迭代器失效问题及其解决方案；最后介绍了二维vector的定义和使用。文章强调reserve预扩容可提高效率]]></description><category></category></item><item><title><![CDATA[C++SLT-string类详解]]></title><link>https://blog.youkuaiyun.com/chengO_o/article/details/161051180</link><guid>https://blog.youkuaiyun.com/chengO_o/article/details/161051180</guid><author>chengO_o</author><pubDate>Wed, 13 May 2026 20:51:46 +0800</pubDate><description><![CDATA[摘要：本文详细介绍了C++标准库中的string类，包括其基本特性、常用构造函数、容量操作、访问遍历方式以及修改操作。string类能自动管理内存并支持动态扩容，提供多种构造方式（无参、带参、拷贝等）和实用接口（size、empty、clear等）。文章还讲解了四种遍历方法（[]操作符、迭代器、范围for、auto关键字）以及常用修改操作（push_back、append、find等）。最后介绍了getline函数读取整行输入的方法，解决了cin遇到空格停止的问题。]]></description><category></category></item><item><title><![CDATA[C++模板初阶]]></title><link>https://blog.youkuaiyun.com/chengO_o/article/details/160987049</link><guid>https://blog.youkuaiyun.com/chengO_o/article/details/160987049</guid><author>chengO_o</author><pubDate>Mon, 11 May 2026 16:12:10 +0800</pubDate><description><![CDATA[本文介绍了C++中的泛型编程与模板机制。主要内容包括：1）泛型编程概念，通过模板实现代码复用；2）函数模板的定义与使用方式，编译器根据参数类型自动生成具体函数；3）模板实例化的两种方式（隐式和显式）；4）模板与普通函数的匹配规则；5）类模板的定义与实例化方法；6）模板代码通常需要放在头文件中的原因。模板机制将重复编码工作交给编译器，提高了代码的通用性和可维护性，是C++实现泛型编程的核心技术。]]></description><category></category></item><item><title><![CDATA[C++内存管理（超详细解析）]]></title><link>https://blog.youkuaiyun.com/chengO_o/article/details/160960791</link><guid>https://blog.youkuaiyun.com/chengO_o/article/details/160960791</guid><author>chengO_o</author><pubDate>Mon, 11 May 2026 13:54:53 +0800</pubDate><description><![CDATA[本文系统讲解了C/C++程序的内存分布与动态内存管理机制。首先介绍了程序内存的四大区域：栈（局部变量）、堆（动态内存）、数据段（全局/静态变量）和代码段（常量）。重点分析了不同变量在内存中的存储位置，包括全局变量、静态变量、局部变量和动态分配的内存。详细对比了C语言的malloc/calloc/realloc/free与C++的new/delete操作，指出后者会自动调用构造/析构函数且支持初始化。特别强调了new/delete必须配对使用，并解释了new失败时的异常处理机制。最后揭示了new/delete]]></description><category></category></item><item><title><![CDATA[C++拷贝构造函数详解（深度解析）]]></title><link>https://blog.youkuaiyun.com/chengO_o/article/details/160959936</link><guid>https://blog.youkuaiyun.com/chengO_o/article/details/160959936</guid><author>chengO_o</author><pubDate>Sun, 10 May 2026 21:19:58 +0800</pubDate><description><![CDATA[C++拷贝构造函数详解：拷贝构造函数是C++中用于对象复制的重要特殊构造函数，其标准形式为类名(const类名&amp;)。关键特性包括：必须使用引用参数以避免无限递归，默认情况下编译器会生成执行浅拷贝的版本。浅拷贝适用于简单数据类型（如Date类），但对于包含指针和动态内存的类（如Stack类）必须实现深拷贝，即重新分配内存并复制内容。拷贝构造与赋值运算符的区别在于前者用于初始化新对象，后者用于已有对象间的赋值。在函数返回值处理上，传值返回会调用拷贝构造，而引用返回可避免拷贝但需注意不能返回局部变量引用。]]></description><category></category></item><item><title><![CDATA[归并排序详解]]></title><link>https://blog.youkuaiyun.com/chengO_o/article/details/160934783</link><guid>https://blog.youkuaiyun.com/chengO_o/article/details/160934783</guid><author>chengO_o</author><pubDate>Sat, 09 May 2026 21:50:32 +0800</pubDate><description><![CDATA[归并排序是一种基于分治思想的稳定排序算法，通过不断拆分数组为最小单元后有序合并实现排序。其核心步骤包括：递归地将数组二分至单个元素（天然有序），然后两两归并有序区间。算法需要O(n)辅助空间存储临时数组，时间复杂度稳定为O(nlogn)。实现方式可分为递归（思路清晰但有调用开销）和非递归（无递归但边界处理复杂）两种，关键点在于处理归并时的数组越界问题。归并排序的稳定性来源于合并时优先取左区间元素，保持相同元素的原始顺序。]]></description><category></category></item><item><title><![CDATA[C++六大默认成员函数之二--构造函数与析构函数详解]]></title><link>https://blog.youkuaiyun.com/chengO_o/article/details/160934558</link><guid>https://blog.youkuaiyun.com/chengO_o/article/details/160934558</guid><author>chengO_o</author><pubDate>Sat, 09 May 2026 21:34:50 +0800</pubDate><description><![CDATA[本文介绍了C++中类的默认成员函数，重点讲解了构造函数和析构函数。构造函数负责对象初始化而非创建对象，具有自动调用、可重载等特性；析构函数负责资源清理而非销毁对象，生命周期结束时自动调用。文章还讨论了this指针、默认构造函数的行为、C++11缺省值、空类大小等问题，并阐述了RAII思想（资源获取即初始化）这一C++核心资源管理机制。通过对比C语言的初始化方式，展示了C++自动调用构造和析构函数的优势，有效降低了资源泄漏风险。]]></description><category></category></item><item><title><![CDATA[C++引用（Reference）详解——从入门到理解本质]]></title><link>https://blog.youkuaiyun.com/chengO_o/article/details/160885592</link><guid>https://blog.youkuaiyun.com/chengO_o/article/details/160885592</guid><author>chengO_o</author><pubDate>Fri, 08 May 2026 21:20:15 +0800</pubDate><description><![CDATA[C++引用详解摘要：引用是变量的别名，与原变量共享内存空间，本质上是同一对象的多个名称。关键特性包括必须初始化、不能重新绑定、允许多个引用指向同一对象。引用主要用于简化传参（替代指针）、提高效率、修改结构体和作为返回值。const引用用于处理常对象和临时对象。与指针相比，引用更安全易用但不能为空或改变绑定。引用在数据结构和函数参数传递中广泛应用，能有效替代二级指针，提升代码可读性。引用不是新变量，而是原变量的另一个名称。]]></description><category></category></item><item><title><![CDATA[计数排序详解]]></title><link>https://blog.youkuaiyun.com/chengO_o/article/details/160882784</link><guid>https://blog.youkuaiyun.com/chengO_o/article/details/160882784</guid><author>chengO_o</author><pubDate>Fri, 08 May 2026 10:37:24 +0800</pubDate><description><![CDATA[计数排序是一种非比较型整数排序算法，通过统计元素出现次数实现排序。其核心思想是空间换时间，采用绝对映射或相对映射（推荐）将数值转换为数组下标，能处理负数并节省空间。实现步骤包括：确定数值范围、创建计数数组、统计频率、恢复有序数组。时间复杂度为O(n+range)，空间复杂度O(range)。优点是速度快、实现简单，适合数据范围集中的整数排序；缺点是需要额外空间，不适用于小数或离散数据。典型应用包括成绩统计、年龄排序等场景。]]></description><category></category></item><item><title><![CDATA[希尔排序详解]]></title><link>https://blog.youkuaiyun.com/chengO_o/article/details/160830069</link><guid>https://blog.youkuaiyun.com/chengO_o/article/details/160830069</guid><author>chengO_o</author><pubDate>Thu, 07 May 2026 13:40:00 +0800</pubDate><description><![CDATA[小的元素大致靠前大的元素大致靠后中间元素分布相对合理前半部分整体较小后半部分整体较大那么它就比完全逆序更接近有序状态。通过 gap 分组不断优化数据结构，使插入排序在接近有序的数据上运行。]]></description><category></category></item><item><title><![CDATA[直接插入排序算法详解]]></title><link>https://blog.youkuaiyun.com/chengO_o/article/details/160828991</link><guid>https://blog.youkuaiyun.com/chengO_o/article/details/160828991</guid><author>chengO_o</author><pubDate>Wed, 06 May 2026 18:23:23 +0800</pubDate><description><![CDATA[直接插入排序是一种非常直观的排序方式，它的思想和我们日常生活中的“整理扑克牌”过程非常相似。其核心思路是：将数据分为“已排序部分”和“未排序部分”，每次从未排序部分取一个元素，插入到已排序序列中的合适位置，从而逐步扩大有序区间。刚开始时，第一个元素天然是有序的，之后不断“插入新元素”，最终完成整体排序。实现简单稳定排序算法适用于小规模数据数据量大时效率较低（O(n²)）]]></description><category></category></item></channel></rss>