<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Jupiter1007的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/Jupiter1007</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; Jupiter1007]]></copyright><item><title><![CDATA[继承：从 is-a 分界线到菱形继承的独木桥]]></title><link>https://blog.csdn.net/Jupiter1007/article/details/168974802</link><guid>https://blog.csdn.net/Jupiter1007/article/details/168974802</guid><author>Jupiter1007</author><pubDate>Sat, 24 Oct 2026 17:11:15 +0800</pubDate><description><![CDATA[继承通过抽取公共成员与行为实现代码复用，避免重复。判断是否使用继承应遵循“is-a”原则：若“X是一个Y”成立则用继承，否则用组合（has-a）。C++中默认class为私有继承，易引发访问问题，故继承方式必须显式声明。三种继承方式影响成员访问权限，protected专为派生类设计，private成员虽不可见但被继承并占用内存。构造顺序为先基类后派生类，析构则相反，由语言自动保证。]]></description><category></category></item><item><title><![CDATA[模板进阶：编译期代码生成、三类参数、特化与分离编译]]></title><link>https://blog.csdn.net/Jupiter1007/article/details/168974163</link><guid>https://blog.csdn.net/Jupiter1007/article/details/168974163</guid><author>Jupiter1007</author><pubDate>Sat, 24 Oct 2026 16:38:38 +0800</pubDate><description><![CDATA[把模板定义连声明一起写进Func.hFunc.cpp// 方案二：定义直接放头文件。包含它的编译单元在编译期自己实例化，// 不需要链接器去别处找地址——这就是模板普遍写在头文件里的原因#endif每个包含这份头文件的编译单元，在用到的地方自己实例化，用什么类型现场生成什么，链接器再把多个编译单元生成的同名实例去重合并。“去重”这件事同样可以实测。两个.cpp各自调用两个目标文件各带一份，符号名完全相同（，名字修饰里编进了模板实参Ii即 int）；]]></description><category></category></item><item><title><![CDATA[stack、queue、priority_queue、容器适配器完整梳理]]></title><link>https://blog.csdn.net/Jupiter1007/article/details/168973287</link><guid>https://blog.csdn.net/Jupiter1007/article/details/168973287</guid><author>Jupiter1007</author><pubDate>Sat, 24 Oct 2026 16:37:37 +0800</pubDate><description><![CDATA[容器适配器通过组合方式，为底层容器（如deque、vector）提供受限访问接口，实现栈（stack）、队列（queue）和优先队列（priority_queue）的语义。其核心是“不改变数据存储，仅封装操作”，通过模板参数灵活指定底层容器与比较策略（仿函数），确保接口安全与功能独立。栈遵循后进先出，队列实现先进先出，优先队列则基于堆结构与自定义比较规则，体现“策略分离”设计思想。]]></description><category></category></item><item><title><![CDATA[list：哨兵节点，const_iterator 和 const iterator的区别与迭代器失效]]></title><link>https://blog.csdn.net/Jupiter1007/article/details/168437627</link><guid>https://blog.csdn.net/Jupiter1007/article/details/168437627</guid><author>Jupiter1007</author><pubDate>Mon, 19 Oct 2026 12:31:02 +0800</pubDate><description><![CDATA[编号坑现象根因处理1不写拷贝构造两个对象共用一条链，析构时 heap-use-after-free默认拷贝构造逐成员复制，_head指针被抄了一份深拷贝：建自己的哨兵，逐个push_back2析构函数留空节点全泄漏，元素的析构函数一次都没执行只或不写析构，数据节点无人回收clear()后再3用当 const 迭代器const修饰的是迭代器自身，++被禁单独写一个4缺iterator到的转换两个独立类型之间没有转换路径补一个接的构造5const 迭代器后置++写错类型。]]></description><category></category></item><item><title><![CDATA[list：哨兵位、双向链接与迭代器失效]]></title><link>https://blog.csdn.net/Jupiter1007/article/details/168340790</link><guid>https://blog.csdn.net/Jupiter1007/article/details/168340790</guid><author>Jupiter1007</author><pubDate>Sun, 18 Oct 2026 15:33:39 +0800</pubDate><description><![CDATA[int 版本那 24 字节的构成值得算一遍：数据 4 字节，为了让后面两个指针按 8 字节对齐，编译器补 4 字节空洞，再加两个 8 字节指针，正好 24。第一，节点怎么连成一个整体。它的价值是"没有半成品状态"：任何一处忘记赋值的地方，表现出来是空指针崩溃，而不是指向随机地址的野指针——后者调试成本高一个量级。这是链表和 vector 最本质的差别：vector 的插入是搬家，list 的插入是接线。复盘顺序按"对象从生到死"排：先看节点和迭代器，再看构造与哨兵初始化，然后是增删改，最后是析构与赋值。]]></description><category></category></item><item><title><![CDATA[vector：三个指针、容量语义与扩容的真实成本]]></title><link>https://blog.csdn.net/Jupiter1007/article/details/168339651</link><guid>https://blog.csdn.net/Jupiter1007/article/details/168339651</guid><author>Jupiter1007</author><pubDate>Sun, 18 Oct 2026 15:32:31 +0800</pubDate><description><![CDATA[本文系统解析了vector容器的核心机制：基于三指针模型（_start, _finish, _endofstorage）实现动态内存管理，通过左闭右开区间简化逻辑。关键概念包括：size为逻辑长度、capacity为物理容量，二者通过指针相减获得；扩容时需先申请新内存、拷贝元素、释放旧内存，确保深拷贝与迭代器失效处理；容量只增不减，reserve与resize分工明确。均摊时间复杂度为O(1)，但扩容成本为O(n)。理解元素生命周期与指针语义是正确实现的关键。]]></description><category></category></item><item><title><![CDATA[【C++】string类模拟实现]]></title><link>https://blog.csdn.net/Jupiter1007/article/details/167584707</link><guid>https://blog.csdn.net/Jupiter1007/article/details/167584707</guid><author>Jupiter1007</author><pubDate>Sun, 11 Oct 2026 17:18:45 +0800</pubDate><description><![CDATA[本文实现了一个自定义string类，包含成员变量_str、_size、_capacity及静态常量npos，并封装了默认成员函数（构造、析构、拷贝构造、赋值重载）、成员函数（如c_str、size、reserve、push_back、append、insert、erase、find、substr、clear、swap）和运算符重载（如[]、+=、&lt;&lt;、&gt;&gt;、&lt;、&lt;=、&gt;、&gt;=、==、!=）。通过深拷贝确保内存安全，支持迭代器遍历，具备异常安全与高效扩容机制，完]]></description><category></category></item><item><title><![CDATA[【C++】string 常用函数详解]]></title><link>https://blog.csdn.net/Jupiter1007/article/details/167128828</link><guid>https://blog.csdn.net/Jupiter1007/article/details/167128828</guid><author>Jupiter1007</author><pubDate>Mon, 05 Oct 2026 23:21:18 +0800</pubDate><description><![CDATA[C++的std::string是标准库提供的字符串类，封装字符序列并自动管理内存，支持构造、赋值、遍历、容量操作及字符串修改等丰富接口。其常用成员函数包括size()、length()、capacity()、empty()、clear()、reserve()、resize()等，用于管理字符串长度与空间。支持operator[]、迭代器（begin/end、rbegin/rend）及范围for遍历，便于元素访问与修改。字符串操作如push_back、append、+=、substr、find、c_str等实]]></description><category></category></item><item><title><![CDATA[【C++】泛型编程详解：函数模板与类模板全梳理]]></title><link>https://blog.csdn.net/Jupiter1007/article/details/166892898</link><guid>https://blog.csdn.net/Jupiter1007/article/details/166892898</guid><author>Jupiter1007</author><pubDate>Wed, 30 Sep 2026 12:11:09 +0800</pubDate><description><![CDATA[本文系统介绍了C++泛型编程中的函数模板与类模板。函数模板通过template&lt;typename T&gt;定义通用代码，编译器根据实参自动实例化对应类型函数，支持隐式和显式实例化，实现类型无关的代码复用。类模板则允许定义可适配多种类型的类，如栈容器，成员函数需在类外重新声明模板。两者均在编译期完成实例化，效率高，是STL等标准库的核心基础。]]></description><category></category></item><item><title><![CDATA[【C++】动态内存管理完整解析：从内存划分到 new delete 底层原理]]></title><link>https://blog.csdn.net/Jupiter1007/article/details/166848665</link><guid>https://blog.csdn.net/Jupiter1007/article/details/166848665</guid><author>Jupiter1007</author><pubDate>Tue, 29 Sep 2026 21:33:13 +0800</pubDate><description><![CDATA[本文系统梳理了C/C++内存管理机制，涵盖内存分区（栈、堆、静态区、常量区等）、动态内存管理方式及new/delete与malloc/free的差异。重点解析了new/delete在内置类型和自定义类型上的使用原理，强调其自动调用构造/析构函数的特性；介绍了operatornew/operatordelete底层实现及定位new的应用场景，如内存池优化。最后对比了malloc/free与new/delete在语法、异常处理、类型支持等方面的区别，指出正确配对使用的重要性，避免内存泄漏与野指针问题。]]></description><category></category></item><item><title><![CDATA[【C++】Date类的实现]]></title><link>https://blog.csdn.net/Jupiter1007/article/details/166789929</link><guid>https://blog.csdn.net/Jupiter1007/article/details/166789929</guid><author>Jupiter1007</author><pubDate>Mon, 28 Sep 2026 18:05:51 +0800</pubDate><description><![CDATA[本文详细介绍了自定义Date类的实现，包含私有成员变量（年、月、日）、构造函数及日期合法性校验。通过重载比较运算符（如&gt;、==等），实现日期大小比较，并利用复用机制减少代码冗余。支持加减天数、前置/后置++/--运算，以及日期相减计算天数差。所有函数均考虑效率与安全性，如使用引用传参、const修饰保证不变性，结合GetMonthDay处理闰年二月，确保日期操作正确可靠。]]></description><category></category></item><item><title><![CDATA[【C++】入门基础语法]]></title><link>https://blog.csdn.net/Jupiter1007/article/details/166740263</link><guid>https://blog.csdn.net/Jupiter1007/article/details/166740263</guid><author>Jupiter1007</author><pubDate>Sun, 27 Sep 2026 21:52:38 +0800</pubDate><description><![CDATA[命名空间用于隔离标识符，解决命名冲突，支持嵌套与分段定义，编译期生效且不占内存。可通过作用域限定、using声明或using指令访问成员，但避免在头文件中使用using namespace。C++输入输出基于流对象（如cin、cout），自动识别类型，支持链式调用，可重载运算符以处理自定义类型。缺省参数简化调用，需从右向左连续设置，不可与重载混用。函数重载通过参数列表区分，返回值不同不构成重载。引用是变量别名，共用内存，提升效率并支持修改实参，但不能绑定临时对象（除非为const引用）。指针与引用区别在于内]]></description><category></category></item><item><title><![CDATA[【C++】static、友元、内部类、匿名对象与拷贝编译器优化全解析]]></title><link>https://blog.csdn.net/Jupiter1007/article/details/166739571</link><guid>https://blog.csdn.net/Jupiter1007/article/details/166739571</guid><author>Jupiter1007</author><pubDate>Sun, 27 Sep 2026 20:46:33 +0800</pubDate><description><![CDATA[本文系统阐述C++中const与static成员的初始化机制，强调const成员需在构造函数初始化列表中赋值，而static成员须在类外定义并初始化，且所有对象共享。友元机制允许外部函数或类访问私有成员，但破坏封装性，应谨慎使用。内部类作为外部类的作用域成员，可访问其所有成员，但外部类需通过对象访问内部类。匿名对象生命周期短暂，仅存在于创建语句中，适用于临时操作。最后，编译器优化（如RVO/NRVO）可省略拷贝构造，提升性能，尤其在返回局部对象时效果显著。]]></description><category></category></item><item><title><![CDATA[【C++】万字解析类和对象]]></title><link>https://blog.csdn.net/Jupiter1007/article/details/166736948</link><guid>https://blog.csdn.net/Jupiter1007/article/details/166736948</guid><author>Jupiter1007</author><pubDate>Sun, 27 Sep 2026 18:24:23 +0800</pubDate><description><![CDATA[main 函数并不会直接去调用 Time 类的析构函数，我们要释放的本质是 Date 对象，编译器会调用 Date 类的析构函数，这里我们没有手写 Date 的析构，编译器就自动生成 Date 的默认析构函数，这个默认析构内部会自动调用成员_t（Time 对象）的析构函数，保证 Date 对象内部所有自定义类型成员都能够正确完成销毁。this 指针是编译器提供的隐藏工具，每一个非静态的成员函数，编译器都会自动增加一个隐藏形参，这个形参就是 this 指针，它保存着调用该成员函数的对象地址。]]></description><category></category></item><item><title><![CDATA[【数据结构】计数排序]]></title><link>https://blog.csdn.net/Jupiter1007/article/details/164305294</link><guid>https://blog.csdn.net/Jupiter1007/article/details/164305294</guid><author>Jupiter1007</author><pubDate>Wed, 02 Sep 2026 22:31:38 +0800</pubDate><description><![CDATA[计数排序是非比较排序，通过统计元素出现频次实现有序。先确定数组最大最小值以计算范围，创建计数数组并清零，遍历原数组统计各数值次数，再据计数顺序回填。其适合数据范围集中的整数，跨度大则浪费空间。算法时间复杂度线性，但需额外计数数组。]]></description><category></category></item><item><title><![CDATA[【数据结构】冒泡，堆，归并排序]]></title><link>https://blog.csdn.net/Jupiter1007/article/details/164304663</link><guid>https://blog.csdn.net/Jupiter1007/article/details/164304663</guid><author>Jupiter1007</author><pubDate>Wed, 02 Sep 2026 22:09:47 +0800</pubDate><description><![CDATA[&lt;think&gt;我们只需要根据内容生成摘要，≤150字。内容主要是排序算法介绍，包括冒泡、堆排序、归并排序递归和非递归。摘要应概括这些算法的核心思想和复杂度。避免太多细节。我们写简短：介绍三种排序算法：冒泡排序通过相邻比较交换，最坏O(n²)，优化可提前结束；堆排序利用大顶堆，建堆后交换堆顶与末尾并调整，O(nlogn)；归并排序采用分治，递归/非递归实现，稳定但需额外空间O(n)。确保字数。&lt;/think&gt;本文介绍了三种排序算法：冒泡排序通过相邻元素两两比较交换，优化后可提前终止，最]]></description><category></category></item><item><title><![CDATA[【数据结构】排序（快排，选择，直接插入，希尔）]]></title><link>https://blog.csdn.net/Jupiter1007/article/details/163981944</link><guid>https://blog.csdn.net/Jupiter1007/article/details/163981944</guid><author>Jupiter1007</author><pubDate>Sun, 23 Aug 2026 00:11:21 +0800</pubDate><description><![CDATA[快速排序是基于分治思想的经典交换排序算法，它选定一个元素作为基准值，通过双指针遍历将数组划分为两部分，使基准左侧元素全部小于等于它、右侧元素全部大于等于它，再递归对划分得到的左右子区间重复上述操作，不断缩小待排序范围，最终得到整体有序的数组，平均时间复杂度为 O (nlogn)，最坏情况下可达 O (n²)，属于不稳定排序。2).Hoare快排选取区间最左侧下标 keyi 作为基准位置，将left 指针移到基准的下一位开始遍历；在外层循环下，使 right先移动，right 从区间右端向左遍历，当。]]></description><category></category></item><item><title><![CDATA[【数据结构】二叉树入门必刷]]></title><link>https://blog.csdn.net/Jupiter1007/article/details/163862986</link><guid>https://blog.csdn.net/Jupiter1007/article/details/163862986</guid><author>Jupiter1007</author><pubDate>Tue, 18 Aug 2026 20:51:55 +0800</pubDate><description><![CDATA[本文总结了二叉树常见算法题解法，包括单值二叉树判断、相同树比较、对称二叉树验证、子树查找、前中后序遍历实现及二叉树构建与遍历。各题目均采用递归思路，通过判断节点值和结构一致性解决问题，遍历类题目通过统计节点数动态分配数组存储结果。特别地，二叉树构建题目通过前序字符串递归建树，再中序遍历输出。所有解法均给出详细思路和C语言代码实现，展现了递归在二叉树问题中的典型应用。]]></description><category></category></item><item><title><![CDATA[【数据结构】C语言实现链式二叉树]]></title><link>https://blog.csdn.net/Jupiter1007/article/details/163834302</link><guid>https://blog.csdn.net/Jupiter1007/article/details/163834302</guid><author>Jupiter1007</author><pubDate>Tue, 18 Aug 2026 00:12:02 +0800</pubDate><description><![CDATA[本文系统介绍了链式二叉树的实现与操作，包括节点创建、遍历算法（先序、中序、后序、层序）、节点统计（总数、叶子节点、左右子节点）、高度计算、层级节点查询、节点查找、完全二叉树判断、二叉树翻转和销毁等16个核心功能。重点阐述了递归思想在二叉树操作中的应用，并展示了队列在层序遍历和完全二叉树判断中的关键作用。所有操作均通过C语言实现，提供了完整的代码示例，为理解和实现链式二叉树数据结构提供了全面参考。]]></description><category></category></item><item><title><![CDATA[【数据结构】堆的应用]]></title><link>https://blog.csdn.net/Jupiter1007/article/details/163735486</link><guid>https://blog.csdn.net/Jupiter1007/article/details/163735486</guid><author>Jupiter1007</author><pubDate>Fri, 14 Aug 2026 01:00:36 +0800</pubDate><description><![CDATA[建堆有两种方式，一种是从堆顶开始向下建堆，另一种是从堆尾开始向上建堆，好像两种建堆方式除了向上调整和向下调整方式不同之外没什么区别，但我们仔细分析一下，其实这两种建堆方式的时间复杂度差别是很大的。向上调整建堆的话，假设是一个数据一个数据参与堆结构的创建，一开始是一个数据，该数据就是堆顶，然后是第二个数据，这个数据要与堆顶比较（向上调整），如此遍历数据，直到数据全部都在堆结构中。建堆完成以后，就是一个大堆，堆顶数据是堆中数据的最大值，要保留 K 个最好的，堆顶放这 K 个里面最差的，用来当门槛。]]></description><category></category></item></channel></rss>