<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[2302_79981653的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/2302_79981653</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; 2302_79981653]]></copyright><item><title><![CDATA[【CPP】CPP的STL(后篇)]]></title><link>https://blog.youkuaiyun.com/2302_79981653/article/details/146325384</link><guid>https://blog.youkuaiyun.com/2302_79981653/article/details/146325384</guid><author>2302_79981653</author><pubDate>Tue, 18 Mar 2025 12:07:53 +0800</pubDate><description><![CDATA[本章节会着重了解和分析STL中关于树的相关数据结构以及手撕代码]]></description><category></category></item><item><title><![CDATA[【CPP】类与多态]]></title><link>https://blog.youkuaiyun.com/2302_79981653/article/details/142769294</link><guid>https://blog.youkuaiyun.com/2302_79981653/article/details/142769294</guid><author>2302_79981653</author><pubDate>Tue, 08 Oct 2024 21:35:52 +0800</pubDate><description><![CDATA[例如典中典的火车票的例子,设计一个自助售票函数,设计一个父类为乘客,设计一个子类继承自父类为学生,再设计一个子类继承自父类为军人,每个种乘客类型可以买不同价格的票,当这类对象作为参数(传引用/指针)传进一个为父类"乘客"的自助售票函数中,根据函数判断生成符合当前乘客身份的票。覆写的概念很重要,从字面意思咱就知道,子类的情况可能会和父类不太一样,此时我们就可以覆写掉父类的方法,改成我们想让子类所呈现的模式,当然,这里的覆写在底层的角度上其实说不上是覆写,这个后面的小节会提到。]]></description><category></category></item><item><title><![CDATA[【CPP】类与继承]]></title><link>https://blog.youkuaiyun.com/2302_79981653/article/details/142405323</link><guid>https://blog.youkuaiyun.com/2302_79981653/article/details/142405323</guid><author>2302_79981653</author><pubDate>Fri, 20 Sep 2024 21:39:59 +0800</pubDate><description><![CDATA[父类,如果当前类的子类是多继承就会影响到子类,将当前类的子类中重复的当前类的父类部分合二为一,所以说虚继承关系到3个具有父子关系的类。发现了吗,平板电脑因为既继承了笔记本电脑,又继承了手机,所以其中包含了两个计算机的特性,这就产生了数据冗余和二义性的问题。在以上的例子中我们称反恐精英为玩家的子类,玩家为反恐精英的父类,反恐精英继承自玩家这个父类。简单来说单继承就是只有一个"继承链"的继承方式,类似于链表,每个类的父节点都是唯一的。标签,所有的底层全都是开放的,导致子类可以很轻松地使用到父类底层的所有东西。]]></description><category></category></item><item><title><![CDATA[【CPP】模板(后篇)]]></title><link>https://blog.youkuaiyun.com/2302_79981653/article/details/142319519</link><guid>https://blog.youkuaiyun.com/2302_79981653/article/details/142319519</guid><author>2302_79981653</author><pubDate>Tue, 17 Sep 2024 21:51:16 +0800</pubDate><description><![CDATA[但如果声明和定义分离了,调用的源头会在编译的时候找到函数声明但却没有找到含函数定义,这时候会假设存在这样的函数,但此时定义还是个模板,并没有被实例化,所以在找函数的时候,就会找不到,所以如果要进行声明和定义分离的话,就一定要函数定义实例化,这样才能在链接的时候有函数可找。不过从根本上说,函数特化其实并不好用,问题就出自上面这条"特化要求特化能传的,原模版也要能传",这就导致了一个重要的问题,假如说原模版使用了传引用传参而不是传值传参,就会出现很多问题。先赞后看,养成习惯!模版的特化可以理解为模板的重载。]]></description><category></category></item><item><title><![CDATA[【leetcode精选】盛水最多的容器]]></title><link>https://blog.youkuaiyun.com/2302_79981653/article/details/141907875</link><guid>https://blog.youkuaiyun.com/2302_79981653/article/details/141907875</guid><author>2302_79981653</author><pubDate>Thu, 05 Sep 2024 01:38:58 +0800</pubDate><description><![CDATA[首先我们知道,计算能盛多少水,就是算这个框住的方形的长宽,长很大,宽很小,算出来就很小,长很小,宽很大,同样也白搭,我们要做的就是尽可能保证长和宽都很大。不难看出,这种写法包含大量的重复计算,每对数会被重复匹配两次,工作量相当于翻了一倍,显然不妥当,且时间复杂度为O(n^2),速度慢。不难看出,这种方法中,左指针一共要挪动n次,每次挪动后要匹配(n-left-1)次,时间复杂度还是O(n^2)更新,当移动指针完成一轮之后,更新固定指针,指向下一个数,不断重复直至固定指针超出范围,结束循环。]]></description><category></category></item><item><title><![CDATA[【CPP】CPP的STL(前篇)]]></title><link>https://blog.youkuaiyun.com/2302_79981653/article/details/141142374</link><guid>https://blog.youkuaiyun.com/2302_79981653/article/details/141142374</guid><author>2302_79981653</author><pubDate>Mon, 12 Aug 2024 21:47:59 +0800</pubDate><description><![CDATA[简单来说:CPP在有了模板之后,很多重复性质的代码就不需要自己手撕很多遍了,甚至说有前人做了一个库,把常见的算法,数据结构啥的放进库里面,这些数据结构,算法啥的全都采用了模板类和模板函数的形式,使得这个库里的代码复用率极高,况且写这个库的人都是大佬级别的大佬,效率也很不错,所以在CPP实际开发中,就不需要自己再造轮子了,调用这个库里的玩意就行STL目前有两个需要去学习的版本,一个是微软家的PJ版,一个是GCC(Linux)的SGI版,这俩调用的效果都是一样的,只是底层不一样,需要了解一下。]]></description><category></category></item><item><title><![CDATA[【CPP】CPP的模板(前篇)]]></title><link>https://blog.youkuaiyun.com/2302_79981653/article/details/140618893</link><guid>https://blog.youkuaiyun.com/2302_79981653/article/details/140618893</guid><author>2302_79981653</author><pubDate>Mon, 22 Jul 2024 20:45:48 +0800</pubDate><description><![CDATA[模板是分割C和C++的重要的分水线,决定了C语言注定不能取代C++设计模板一般咱称作为泛型编程,泛型编程即通过数据类型编写代码,使得同一段代码能够不断复用,提高了代码的复用性模板一般分为函数模板类模板public:,_size(0),_capa(n){}~Stack()_size = 0;_capa = 0;" ]]></description><category></category></item><item><title><![CDATA[【CPP】CPP的内存管理]]></title><link>https://blog.youkuaiyun.com/2302_79981653/article/details/140618791</link><guid>https://blog.youkuaiyun.com/2302_79981653/article/details/140618791</guid><author>2302_79981653</author><pubDate>Mon, 22 Jul 2024 20:20:10 +0800</pubDate><description><![CDATA[内存池是向堆申请的一部分空间,用来专门存放经常需要申请和释放内存的数据,内存池与堆是独立开的,所以如果想从内存池中申请空间,就不能用在堆申请空间的那套模式,于是就有了以上模式,相当于手动模拟申请空间,只不过实际上申请的是内存池的空间。的区别,主要还是体现在CPP引入的一些新内容上,为了适配CPP引入的新内容,前者是后者的升级版。CPP可以继续使用C的内存管理方式,但CPP引入了更加方便的关键字用于内存管理,即。,也是可以手动调用的,但构造函数没办法手动调用,就是能靠。的定义,前者只是后者的一部分而已。]]></description><category></category></item><item><title><![CDATA[【CPP】CPP的命名空间&输入输出&缺省参数&函数重载]]></title><link>https://blog.youkuaiyun.com/2302_79981653/article/details/140294981</link><guid>https://blog.youkuaiyun.com/2302_79981653/article/details/140294981</guid><author>2302_79981653</author><pubDate>Tue, 09 Jul 2024 15:32:21 +0800</pubDate><description><![CDATA[域影响编译的时候查找变量的/函数/类型出处(声明/定义)的逻辑,有了域隔离之后,就能避免名字冲突的问题,局部域和全局域除了会影响编译查找逻辑之外,还会影响变量的生命周期,命名空间域和类域不影响变量的生命周期。命名空间的这个操作就像是厕所一样,厕所有我家厕所,也有同事家厕所,都叫厕所你说你要用厕所,我咋知道你要用谁家的厕所?于是就加一个前缀说明一下,要用谁家的厕所。编译查找一个变量的时候,默认情况下,会优先查找局部域,然后是全局域,但不会去查找命名空间域,所以一般对于命名空间的访问,有以下几种。]]></description><category></category></item><item><title><![CDATA[【CPP】CPP中类 -- class 的基本使用]]></title><link>https://blog.youkuaiyun.com/2302_79981653/article/details/139987172</link><guid>https://blog.youkuaiyun.com/2302_79981653/article/details/139987172</guid><author>2302_79981653</author><pubDate>Wed, 26 Jun 2024 13:51:42 +0800</pubDate><description><![CDATA[类是面向对象的一种设计,其中封装了我们对对象的"描述",或者说对象的"特征"比方说我们要描述一个游戏玩家,那么这个玩家至少要有以下"特征"玩家在地图中的位置玩家的速度等等在本节我们也会不断地举玩家这个例子int x, y;int speed;int main()//创建一个player变量//创建一个player变量一般称创建一个新变量的过程为"实例化",新的变量称为"对象"类的基础定义其实和结构体没什么两样,但以下我们来讲讲类的进阶玩法static。]]></description><category></category></item><item><title><![CDATA[【CPP】CPP的语法糖&引用&内联函数&nullptr]]></title><link>https://blog.youkuaiyun.com/2302_79981653/article/details/139890271</link><guid>https://blog.youkuaiyun.com/2302_79981653/article/details/139890271</guid><author>2302_79981653</author><pubDate>Sun, 23 Jun 2024 00:13:47 +0800</pubDate><description><![CDATA[引用可以当作一个变量使用,但定义的引用在内存中并不存在,你可以理解为变量的一个别称,类似于typedef,只不过typedef是给类型取别名,而引用是给变量取别名int a = 10;ref = 1;//此时a就被改成了1了在以上代码,ref即a的引用,值得注意的是,这里ref的类型应该是int&和int应该是一体的编译过后ref会被替换成a,原本的ref和ref的定义会直接消失如果你想中途更改ref引用的目标变量,那请你把ref改成指针,因为ref压根就不能改int a = 10;]]></description><category></category></item><item><title><![CDATA[【数据结构】【C语言】归并排序~动画超详解！]]></title><link>https://blog.youkuaiyun.com/2302_79981653/article/details/139711353</link><guid>https://blog.youkuaiyun.com/2302_79981653/article/details/139711353</guid><author>2302_79981653</author><pubDate>Sun, 16 Jun 2024 23:32:48 +0800</pubDate><description><![CDATA[请看完整动画:]]></description><category></category></item><item><title><![CDATA[【数据结构】【C语言】快速排序~动画超详解]]></title><link>https://blog.youkuaiyun.com/2302_79981653/article/details/139507290</link><guid>https://blog.youkuaiyun.com/2302_79981653/article/details/139507290</guid><author>2302_79981653</author><pubDate>Fri, 07 Jun 2024 23:32:37 +0800</pubDate><description><![CDATA[博主研究快排的时候,花了一个下午调试bug,死活搞不明白为啥逻辑没错也会排序失败,直到对比其他人的代码之后才明白,,于是有些前人认为,霍尔版的快排似乎很容易犯这样的错误,于是就有了下面的前后指针法。1.霍尔版快速排序(未优化)2.霍尔版快速排序(优化版)3.前后指针法快速排序。]]></description><category></category></item><item><title><![CDATA[【数据结构】二叉树的层序遍历~动画超详解]]></title><link>https://blog.youkuaiyun.com/2302_79981653/article/details/139331282</link><guid>https://blog.youkuaiyun.com/2302_79981653/article/details/139331282</guid><author>2302_79981653</author><pubDate>Sun, 02 Jun 2024 19:28:53 +0800</pubDate><description><![CDATA[比方说这颗二叉树:
前序遍历:层序遍历:]]></description><category></category></item><item><title><![CDATA[【数据结构】【C语言】堆~动画超详细解读！]]></title><link>https://blog.youkuaiyun.com/2302_79981653/article/details/139154345</link><guid>https://blog.youkuaiyun.com/2302_79981653/article/details/139154345</guid><author>2302_79981653</author><pubDate>Fri, 24 May 2024 02:35:46 +0800</pubDate><description><![CDATA[简单来说堆是二叉树的一种表示方式,它在逻辑上就是一颗完全二叉树,它在物理上却是一个数组,这么说可能有点抽象,我们原来学习的栈,队列,或者说顺序表,链表等等,他们的逻辑结构和物理结构是相同或者相似的,就会比较好理解一些,而在堆这里物理结构和逻辑结构截然不同,理解相对就会比较抽象一些,我们接着看//堆在物理上是一个数组,我们直接按数组的定义方式就行//类型定义int size;int capa;}Heap;]]></description><category></category></item><item><title><![CDATA[【LeetCode例232】【C语言】用栈实现队列~动画超详细解读!]]></title><link>https://blog.youkuaiyun.com/2302_79981653/article/details/138797585</link><guid>https://blog.youkuaiyun.com/2302_79981653/article/details/138797585</guid><author>2302_79981653</author><pubDate>Thu, 16 May 2024 04:05:20 +0800</pubDate><description><![CDATA[请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作**（push、pop、peek、empty）**：void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空，返回 true；否则，返回 false。]]></description><category></category></item><item><title><![CDATA[【数据结构】【C语言】队列 动画详解]]></title><link>https://blog.youkuaiyun.com/2302_79981653/article/details/138930380</link><guid>https://blog.youkuaiyun.com/2302_79981653/article/details/138930380</guid><author>2302_79981653</author><pubDate>Thu, 16 May 2024 01:38:53 +0800</pubDate><description><![CDATA[队列是一个带有限制的线性表,他限制在你只能从尾部进入数据,再从头部出数据,就像排队一样,先进去的肯定先出来,后进去的肯定后出来(我么们来看看动画)队列我们一般用链表实现,当然用顺序表其实也是可以的,只是说用起来没有链表方便//链表节点定义}QNode;int size;}QU;]]></description><category></category></item><item><title><![CDATA[【数据结构】【C语言】栈 动画详解]]></title><link>https://blog.youkuaiyun.com/2302_79981653/article/details/138925665</link><guid>https://blog.youkuaiyun.com/2302_79981653/article/details/138925665</guid><author>2302_79981653</author><pubDate>Wed, 15 May 2024 23:23:44 +0800</pubDate><description><![CDATA[所以,我们说栈就是一片特殊的顺序表,用于暂时存储某些数据,先放进栈的最后出栈(使用),后放进栈的最先出栈(使用),就有点像羽毛球筒一样,先放进去的羽毛球最后使用,后放进去的羽毛球最先使用,因为栈的限制性,他只允许栈顶的元素改变(我们可以看看动画)这里pdata应该是一个数组的指针,这个数组的空间我们在栈初始化的时候再申请pdata — 数组top — 栈顶下标capa — 当前栈能承载的元素数int top;int capa;}ST;]]></description><category></category></item><item><title><![CDATA[【LeetCode LCR 022】【C语言】环形链表 II]]></title><link>https://blog.youkuaiyun.com/2302_79981653/article/details/138662286</link><guid>https://blog.youkuaiyun.com/2302_79981653/article/details/138662286</guid><author>2302_79981653</author><pubDate>Sun, 12 May 2024 19:04:12 +0800</pubDate><description><![CDATA[给定一个链表，返回链表开始入环的第一个节点。从链表的头节点开始沿着next指针进入环的第一个节点为环的入口节点。如果链表无环，则返回null。为了表示给定链表中的环，我们使用整数pos来表示链表尾连接到链表中的位置（索引从 0 开始）。如果pos是-1，则在该链表中没有环。注意，pos仅仅是用于标识环的情况，并不会作为参数传递到函数中。不允许修改给定的链表。示例1：输入以下链表，值为3的节点为head节点返回值应该为值为2的节点示例2：输入以下链表，值为1的节点为head节点。]]></description><category></category></item><item><title><![CDATA[【LeetCode例141】【c语言】环形链表]]></title><link>https://blog.youkuaiyun.com/2302_79981653/article/details/138501189</link><guid>https://blog.youkuaiyun.com/2302_79981653/article/details/138501189</guid><author>2302_79981653</author><pubDate>Mon, 06 May 2024 23:03:15 +0800</pubDate><description><![CDATA[给你一个链表的头节点head，判断链表中是否有环。如果链表中有某个节点，可以通过连续跟踪next指针再次到达，则链表中存在环。为了表示给定链表中的环，评测系统内部使用整数pos来表示链表尾连接到链表中的位置（索引从 0 开始）。pos不作为参数进行传递。仅仅是为了标识链表的实际情况。如果链表中存在环，则返回true。否则，返回false。]]></description><category></category></item></channel></rss>