<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ydm_ymz的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ydm_ymz</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ydm_ymz]]></copyright><item><title><![CDATA[606. 二叉树创建字符串]]></title><link>https://blog.youkuaiyun.com/ydm_ymz/article/details/149371849</link><guid>https://blog.youkuaiyun.com/ydm_ymz/article/details/149371849</guid><author>ydm_ymz</author><pubDate>Tue, 15 Jul 2025 22:41:14 +0800</pubDate><description><![CDATA[这道题目要求将二叉树转换为特定格式的字符串表示。解题思路是递归遍历二叉树，根据子节点的情况添加括号：当左节点或右节点存在时，必须为左节点添加括号；仅当右节点存在时，才需要为右节点添加括号。具体实现中，先处理当前节点的值，然后根据左右子节点的情况递归处理并添加括号。这种方法确保了空子节点不会产生多余的括号，同时满足题目要求的字符串格式。时间复杂度为O(n)，空间复杂度为O(n)（递归栈空间）。]]></description><category></category></item><item><title><![CDATA[137. 只出现一次的数字 II]]></title><link>https://blog.youkuaiyun.com/ydm_ymz/article/details/149371810</link><guid>https://blog.youkuaiyun.com/ydm_ymz/article/details/149371810</guid><author>ydm_ymz</author><pubDate>Tue, 15 Jul 2025 22:39:55 +0800</pubDate><description><![CDATA[本文介绍了LeetCode 137题&quot;只出现一次的数字 II&quot;的解法。题目要求在线性时间内找出仅出现一次的数字，其余数字均出现三次。主要思路是通过位运算统计每个比特位1的总数，对3取模后确定唯一数字的比特位。具体实现是遍历32个比特位，计算每个位上1的总数，若不被3整除则设置结果对应位为1。该方法时间复杂度O(N)，空间复杂度O(1)。文章还提到存在更简洁但不直观的解法，并提供了参考链接。]]></description><category></category></item><item><title><![CDATA[算法:投票法]]></title><link>https://blog.youkuaiyun.com/ydm_ymz/article/details/149339868</link><guid>https://blog.youkuaiyun.com/ydm_ymz/article/details/149339868</guid><author>ydm_ymz</author><pubDate>Mon, 14 Jul 2025 21:37:07 +0800</pubDate><description><![CDATA[摘要：改进的投票法（Boyer-Moore算法）通过两轮操作高效寻找数组中出现次数超半的数字。第一轮投票通过数字抵消找出候选值，第二轮验证该候选值是否满足条件。算法时间复杂度O(n)，空间复杂度O(1)，是解决多数票问题的最优方案。核心思想是利用多数票的抵消特性，先筛选后验证，确保结果正确性。代码实现简洁，适用于大规模数据处理。]]></description><category></category></item><item><title><![CDATA[进阶03 二叉树进阶]]></title><link>https://blog.youkuaiyun.com/ydm_ymz/article/details/149339710</link><guid>https://blog.youkuaiyun.com/ydm_ymz/article/details/149339710</guid><author>ydm_ymz</author><pubDate>Mon, 14 Jul 2025 21:27:43 +0800</pubDate><description><![CDATA[本文介绍了二叉搜索树(BST)的实现与应用。主要内容包括BST的概念与性质（左子树值小于根节点，右子树值大于根节点，中序遍历有序），基础数据结构实现（节点结构、构造函数、拷贝控制等），以及核心操作的实现：查找（循环与递归两种方式）、插入（根据值大小定位插入位置）和删除（处理四种不同节点情况的删除逻辑）。重点解析了删除操作的复杂情况处理，包括直接删除和替换法删除两种策略。文章还提供了完整的C++代码实现，可作为BST数据结构的学习参考。]]></description><category></category></item><item><title><![CDATA[C语言初阶8-实用调试技巧]]></title><link>https://blog.youkuaiyun.com/ydm_ymz/article/details/149307488</link><guid>https://blog.youkuaiyun.com/ydm_ymz/article/details/149307488</guid><author>ydm_ymz</author><pubDate>Sun, 13 Jul 2025 11:21:40 +0800</pubDate><description><![CDATA[本文主要介绍了程序调试的基本概念、方法和技巧。调试是发现和解决程序错误的过程，相当于程序员扮演侦探角色。文章详细讲解了调试步骤、Debug与Release版本的区别，以及Windows环境下的常用调试快捷键（F5、F9、F10、F11等）。通过两个实例演示了如何利用调试工具发现代码问题，包括阶乘计算错误和数组越界导致的死循环问题。最后，文章提出了编写优质代码的建议，包括使用assert断言、const修饰符等技巧，并以strcpy和strlen函数为例展示了规范的代码实现方式。]]></description><category></category></item><item><title><![CDATA[C语言初阶7-结构体]]></title><link>https://blog.youkuaiyun.com/ydm_ymz/article/details/149307471</link><guid>https://blog.youkuaiyun.com/ydm_ymz/article/details/149307471</guid><author>ydm_ymz</author><pubDate>Sun, 13 Jul 2025 11:20:52 +0800</pubDate><description><![CDATA[int x;int y;}p1;//声明类型的同时定义变量p1//先创建结构体类型，再定义结构体变量// 初始化例如：Stu s = { " 潘 ",20,"11011912011","男" };]]></description><category></category></item><item><title><![CDATA[C语言初阶6-指针]]></title><link>https://blog.youkuaiyun.com/ydm_ymz/article/details/149295225</link><guid>https://blog.youkuaiyun.com/ydm_ymz/article/details/149295225</guid><author>ydm_ymz</author><pubDate>Sat, 12 Jul 2025 15:29:07 +0800</pubDate><description><![CDATA[本文摘要： 指针是编程中存储内存地址的变量，其大小在32位系统为4字节，64位系统为8字节。指针类型决定了操作内存时的字节数（如int操作4字节）和指针运算的步长（如int每次移动4字节）。野指针（指向未知内存的指针）可能由未初始化、越界访问或释放空间导致，可通过初始化、检查边界和置空来避免。指针运算包括加减整数、指针相减（计算距离）和关系比较。合理使用指针类型和避免野指针是安全编程的关键。]]></description><category></category></item><item><title><![CDATA[C语言初阶5-操作符]]></title><link>https://blog.youkuaiyun.com/ydm_ymz/article/details/149295191</link><guid>https://blog.youkuaiyun.com/ydm_ymz/article/details/149295191</guid><author>ydm_ymz</author><pubDate>Sat, 12 Jul 2025 15:27:15 +0800</pubDate><description><![CDATA[本文主要介绍了C语言中的各类操作符及其使用： 算数操作符（+,-,*,/,%）及其注意事项 移位操作符（&gt;&gt;,&lt;&lt;）及其二进制运算规则 位操作符（&amp;,|,^）及其应用场景 赋值和复合赋值操作符 单目操作符（!,~,++,--等）的具体用法 关系操作符和逻辑操作符（&amp;&amp;,||）的运算特点 条件（三目）操作符的语法和使用 逗号表达式的运算规则 文章通过代码示例详细说明了各类操作符的使用方法和注意事项，包括二进制运算技巧、变量交换方案、位操作应用等实际编程场景。]]></description><category></category></item><item><title><![CDATA[C语言初阶4-数组]]></title><link>https://blog.youkuaiyun.com/ydm_ymz/article/details/149280421</link><guid>https://blog.youkuaiyun.com/ydm_ymz/article/details/149280421</guid><author>ydm_ymz</author><pubDate>Fri, 11 Jul 2025 18:13:23 +0800</pubDate><description><![CDATA[本文主要介绍了C语言中一维和二维数组的基本概念与使用方法。内容包括：数组的创建与初始化规则，数组元素的访问方式，数组在内存中的连续存储特性，以及数组越界问题。重点讲解了冒泡排序算法的实现细节，指出了数组作为函数参数时常见的设计错误，并提供了正确的解决方案。通过代码示例展示了如何正确计算数组长度、进行数组遍历和排序操作，同时强调了数组下标从0开始和数组边界检查的重要性。]]></description><category></category></item><item><title><![CDATA[C语言初阶3-函数]]></title><link>https://blog.youkuaiyun.com/ydm_ymz/article/details/149280384</link><guid>https://blog.youkuaiyun.com/ydm_ymz/article/details/149280384</guid><author>ydm_ymz</author><pubDate>Fri, 11 Jul 2025 18:11:21 +0800</pubDate><description><![CDATA[C语言函数基础总结 函数是C语言程序的基本模块单位，分为库函数和自定义函数两类。库函数是C语言提供的标准函数，包括IO、字符串、数学等常用功能；自定义函数则由程序员根据需要编写。 函数的基本结构包括：返回类型、函数名、参数列表和函数体。函数参数分为形式参数和实际参数，形参是实参的临时拷贝。 函数调用有传值调用和传址调用两种方式：传值调用不影响实参，传址调用则通过指针修改实参。 练习示例展示了素数判断、闰年判断和二分查找的实现，其中二分查找需注意数组传参时指针的特性。]]></description><category></category></item><item><title><![CDATA[进阶02 多态]]></title><link>https://blog.youkuaiyun.com/ydm_ymz/article/details/149257540</link><guid>https://blog.youkuaiyun.com/ydm_ymz/article/details/149257540</guid><author>ydm_ymz</author><pubDate>Thu, 10 Jul 2025 20:21:54 +0800</pubDate><description><![CDATA[摘要： 本章讲解了C++多态的概念、实现条件及关键语法。多态指不同对象调用同一函数产生不同行为，需满足两个条件：基类指针/引用调用虚函数，且派生类重写虚函数。虚函数重写要求函数名、参数、返回值相同，析构函数重写例外。C++11引入override检查重写、final禁止重写。抽象类含纯虚函数（=0），无法实例化，派生类必须重写才能使用。多态通过虚函数表实现，涉及重载、重写、隐藏的区别。]]></description><category></category></item><item><title><![CDATA[进阶01 继承]]></title><link>https://blog.youkuaiyun.com/ydm_ymz/article/details/149257245</link><guid>https://blog.youkuaiyun.com/ydm_ymz/article/details/149257245</guid><author>ydm_ymz</author><pubDate>Thu, 10 Jul 2025 19:45:32 +0800</pubDate><description><![CDATA[摘要 本章介绍了面向对象编程中的继承机制，包括继承的概念、定义方式、基类与派生类对象的赋值转换、继承中的作用域规则等核心内容。继承允许派生类复用基类的成员，同时进行功能扩展，形成类层次结构。主要内容包括： 继承概念：派生类复用基类成员，实现类层次的代码复用。 访问权限：不同继承方式（public/protected/private）影响基类成员在派生类中的可见性。 对象赋值转换：派生类对象可赋值给基类对象/指针/引用，反之需强制类型转换。 作用域规则：派生类与基类同名成员会隐藏基类成员，需通过作用域运算符访]]></description><category></category></item><item><title><![CDATA[初阶10 模版进阶]]></title><link>https://blog.youkuaiyun.com/ydm_ymz/article/details/149232458</link><guid>https://blog.youkuaiyun.com/ydm_ymz/article/details/149232458</guid><author>ydm_ymz</author><pubDate>Wed, 09 Jul 2025 20:07:51 +0800</pubDate><description><![CDATA[一个程序（项目）由若干个源文件共同实现，而每个源文件单独编译生成目标文件，最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。【优点】模板复用了代码，节省资源，更快的迭代开发，C++的标准模板库(STL)因此而产生增强了代码的灵活性【缺陷】模板会导致代码膨胀问题，也会导致编译时间变长出现模板编译错误时，错误信息非常凌乱，不易定位错误。]]></description><category></category></item><item><title><![CDATA[初阶9 stack和queue]]></title><link>https://blog.youkuaiyun.com/ydm_ymz/article/details/146580849</link><guid>https://blog.youkuaiyun.com/ydm_ymz/article/details/146580849</guid><author>ydm_ymz</author><pubDate>Thu, 27 Mar 2025 23:50:55 +0800</pubDate><description><![CDATA[stackstack是一种容器适配器，专门用在具有后进先出操作的上下文环境中，其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的，容器适配器即是对特定类封装作为其底层的容器，并提供一组特定的成员函数来访问其元素，将特定类作为其底层的，元素特定容器的尾部(即栈顶)被压入和弹出。stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类，这些容器类应该支持以下操作：empty：判空操作back：获取尾部元素操作push_back：尾部插入元素操作。]]></description><category></category></item><item><title><![CDATA[初阶8 list]]></title><link>https://blog.youkuaiyun.com/ydm_ymz/article/details/146542314</link><guid>https://blog.youkuaiyun.com/ydm_ymz/article/details/146542314</guid><author>ydm_ymz</author><pubDate>Wed, 26 Mar 2025 22:05:07 +0800</pubDate><description><![CDATA[list是可以在常数范围内在任意位置进行插入和删除的序列式容器，并且该容器可以前后双向迭代。list的底层是双向链表结构，双向链表中每个元素存储在互不相关的独立节点中，在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似：最主要的不同在于forward_list是单链表，只能朝前迭代，已让其更简单高效。与其他的序列式容器相比(array，vector，deque)，list通常在任意位置进行插入、移除元素的执行效率更好。与其他序列式容器相比，]]></description><category></category></item><item><title><![CDATA[初阶7 vector]]></title><link>https://blog.youkuaiyun.com/ydm_ymz/article/details/146542238</link><guid>https://blog.youkuaiyun.com/ydm_ymz/article/details/146542238</guid><author>ydm_ymz</author><pubDate>Wed, 26 Mar 2025 22:03:35 +0800</pubDate><description><![CDATA[vector就类似数据结构中的顺序表vector是表示可变大小数组的序列容器。就像数组一样，vector也采用的连续存储空间来存储元素。意味着可以采用下标对vector的元素 进行访问，和数组一样高效。但是又不像数组，它的大小是可以动态改变的，而且它的大小会被容器自 动处理本质讲，vector使用动态分配数组来存储它的元素。当新元素插入时候，这个数组需要被重新分配大小为了增加存储空间。其做法是，分配一个新的数组，然后将全部元素移到这个数组。]]></description><category></category></item><item><title><![CDATA[初阶6 string]]></title><link>https://blog.youkuaiyun.com/ydm_ymz/article/details/146509817</link><guid>https://blog.youkuaiyun.com/ydm_ymz/article/details/146509817</guid><author>ydm_ymz</author><pubDate>Tue, 25 Mar 2025 18:46:38 +0800</pubDate><description><![CDATA[C语言中，字符串是以’\0’结尾的一些字符的集合，为了操作方便，C标准库中提供了一些str系列的库函数，但是这些库函数与字符串是分离开的，不太符合OOP的思想，而且底层空间需要用户自己管理，稍不留神可能还会越界访问。但是 size_t 是用无符号来修饰的，也就是说无符号的 -1，它的补码全是1，也就是整形的最大值，所以他的意思就是：从 pos 位置开始，往后取 42 亿多个字符。迭代器的作用是用来访问容器（用来保存元素的数据结构）中的元素，所以使用迭代器，我们就可以访问容器中里面的元素。]]></description><category></category></item><item><title><![CDATA[初阶5 STL简介]]></title><link>https://blog.youkuaiyun.com/ydm_ymz/article/details/146509784</link><guid>https://blog.youkuaiyun.com/ydm_ymz/article/details/146509784</guid><author>ydm_ymz</author><pubDate>Tue, 25 Mar 2025 18:42:16 +0800</pubDate><description><![CDATA[是C++标准库的重要组成部分，不仅是一个可复用的组件库，而且是一个包罗数据结构与算法的软件框架。]]></description><category></category></item><item><title><![CDATA[初阶4 模板初阶]]></title><link>https://blog.youkuaiyun.com/ydm_ymz/article/details/146478313</link><guid>https://blog.youkuaiyun.com/ydm_ymz/article/details/146478313</guid><author>ydm_ymz</author><pubDate>Mon, 24 Mar 2025 15:49:56 +0800</pubDate><description><![CDATA[本章重点如何实现一个通用的交换函数呢？以下面的交换函数为例：
可以看到两种不同类型的交换函数的实现，我们用重载函数去实现的使用函数重载虽然可以实现，但是有一下几个不好的地方：泛型编程：编写与类型无关的通用代码，是代码复用的一种手段。模板是泛型编程的基础概念函数模板代表了一个函数家族，该函数模板与类型无关，在使用时被参数化，根据实参类型产生函数的特定类型版本。格式
注意：typename 是用来定义模板参数关键字，也可以使用 class（切记：不能使用 struct 代替 class）这里推荐使用class，]]></description><category></category></item><item><title><![CDATA[初阶3 C/C++内存管理]]></title><link>https://blog.youkuaiyun.com/ydm_ymz/article/details/146477768</link><guid>https://blog.youkuaiyun.com/ydm_ymz/article/details/146477768</guid><author>ydm_ymz</author><pubDate>Mon, 24 Mar 2025 15:39:39 +0800</pubDate><description><![CDATA[对于内置类型来说，malloc和new用法几乎一样，但是对于自定义类型来说，new和delete相比于malloc，会调用构造函数和析构函数这里以链表为列，看看malloc和new的区别malloc：单纯开空间//链表int val;//申请节点int main()// 定义n1节点free(n1);return 0;new：开空间+调用构造函数初始化//链表public://构造函数:_next(nullptr), _val(val) // 初始化列表。]]></description><category></category></item></channel></rss>