<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[z85123789的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/z85123789</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; z85123789]]></copyright><item><title><![CDATA[CMake]]></title><link>https://blog.youkuaiyun.com/z85123789/article/details/146241656</link><guid>https://blog.youkuaiyun.com/z85123789/article/details/146241656</guid><author>z85123789</author><pubDate>Thu, 13 Mar 2025 20:33:54 +0800</pubDate><description><![CDATA[CMake简单使用教程]]></description><category></category></item><item><title><![CDATA[I/O多路复用之select]]></title><link>https://blog.youkuaiyun.com/z85123789/article/details/135916742</link><guid>https://blog.youkuaiyun.com/z85123789/article/details/135916742</guid><author>z85123789</author><pubDate>Mon, 29 Jan 2024 17:12:05 +0800</pubDate><description><![CDATA[2、在使用select函数之前，还需要一个数据结构来保存要放到fd_set对象中的文件描述符，因为在select函数返回后，需要对数据结构中的文件描述符进行判断，判断该文件描述符事件是否就绪（判断函数：FD_ISSET()，上面有它的简单介绍），还有一个原因就是select函数返回后，没有就绪的文件描述符会被置0，等下次使用需要重新放到fd_set对象中。那么，select函数中，中间三个参数分别表示需要检测的读文件描述符集合、写文件描述符集合、异常文件描述符集合。其中第一个参数n：表示文件描述符+1。]]></description><category></category></item><item><title><![CDATA[位图和布隆过滤器]]></title><link>https://blog.youkuaiyun.com/z85123789/article/details/131621003</link><guid>https://blog.youkuaiyun.com/z85123789/article/details/131621003</guid><author>z85123789</author><pubDate>Sun, 09 Jul 2023 16:33:38 +0800</pubDate><description><![CDATA[按照上面的思路，用一个bit位表示一个数据是否存在，一个char类型就可以表示8个数据是否存在，我们把512MB分为多个char数组，一个数组表示8个数据，当往里面插入数据时，先用这个数据除以数组个数，得到这个数据应该存在哪个数组里，再用这个数据模8（因为一个数组存8个数据），得到这个数据应该在这个数组中的哪个位置，最后把这个位置变成1（表示存在）。所以，布隆过滤器如果说某个元素不存在时，该元素一定不存在，如果该元素存在时，该元素可能存在，因为有些哈希函数存在一定的误判。快速查找某个数据是否在一个集合中。]]></description><category></category></item><item><title><![CDATA[哈希表及unordered_map、unordered_set的模拟实现]]></title><link>https://blog.youkuaiyun.com/z85123789/article/details/131616143</link><guid>https://blog.youkuaiyun.com/z85123789/article/details/131616143</guid><author>z85123789</author><pubDate>Sun, 09 Jul 2023 11:17:12 +0800</pubDate><description><![CDATA[顺序结构及平衡树中，元素关键码与其存储位置之间没有对应的关系，因此在查找一个元素时，必须经过关键码的多次比较，顺序查找时间复杂度为O(N)，平衡树中为树的高度，即O(log_2 N)，搜索的效率取决于搜索过程中元素的比较次数。如果有一种数据结构，存储的数据与存储的位置呈映射关系，那么不需要进行比较直接通过对应的位置找到映射的数据。其实这种数据结构就叫哈希表或者散列表，插入的数据通过哈希函数得到对应的位置，然后数据就插入在表中对应的位置上，]]></description><category></category></item><item><title><![CDATA[红黑树的模拟实现]]></title><link>https://blog.youkuaiyun.com/z85123789/article/details/131481328</link><guid>https://blog.youkuaiyun.com/z85123789/article/details/131481328</guid><author>z85123789</author><pubDate>Sat, 01 Jul 2023 16:56:09 +0800</pubDate><description><![CDATA[从红黑树的性质中可以看出，一条路径中，最短的情况就是全是黑色节点，最长的情况就是一红一黑。另外由于红黑树的第四条性质，告诉我们，所有根节点到叶子节点的路径中黑色节点数量相同得知，如果要插入一个新节点，那么默认情况下是插入红色节点，因为如果默认插入的是黑色的，那么有一边的黑色节点一定比另一边的数量多。{}T _data;Col _color;]]></description><category></category></item><item><title><![CDATA[面向对象的三大特性之一 —— 多态]]></title><link>https://blog.youkuaiyun.com/z85123789/article/details/130834495</link><guid>https://blog.youkuaiyun.com/z85123789/article/details/130834495</guid><author>z85123789</author><pubDate>Wed, 24 May 2023 01:15:08 +0800</pubDate><description><![CDATA[编译器在执行调用虚函数这个命令时，先是到指针或引用所指向的对象空间里面找虚表，从而拿到要调用的虚函数指针，再通过虚函数指针找到函数最后调用。]]></description><category></category></item><item><title><![CDATA[面向对象的三大特性之一 —— 继承]]></title><link>https://blog.youkuaiyun.com/z85123789/article/details/130789603</link><guid>https://blog.youkuaiyun.com/z85123789/article/details/130789603</guid><author>z85123789</author><pubDate>Sun, 21 May 2023 17:58:05 +0800</pubDate><description><![CDATA[这里是表示B类是以公开的继承方式继承到C1类中，这里我们又讲到继承方式：public：公开继承，protected：保护继承，private：私有继承。理解起来和访问限定符差不多，但是这是两个东西。接下来，我们来看看继承基类成员访问的规则：这里我们不难发现，基类的私有成员不管是通过什么继承方式，在派生类中都不可见，这里的不可见不是没有继承，而是不管是在类里面还是在类外面都不可以访问。]]></description><category></category></item><item><title><![CDATA[关于C++迭代器失效问题]]></title><link>https://blog.youkuaiyun.com/z85123789/article/details/130415949</link><guid>https://blog.youkuaiyun.com/z85123789/article/details/130415949</guid><author>z85123789</author><pubDate>Sat, 29 Apr 2023 21:27:03 +0800</pubDate><description><![CDATA[所谓迭代器失效就是原有的空间被销毁，而继续用迭代器来进行访问，导致程序崩溃。我们以vector为例来讲解迭代器失效问题。]]></description><category></category></item><item><title><![CDATA[C++模板]]></title><link>https://blog.youkuaiyun.com/z85123789/article/details/129961546</link><guid>https://blog.youkuaiyun.com/z85123789/article/details/129961546</guid><author>z85123789</author><pubDate>Tue, 04 Apr 2023 23:59:45 +0800</pubDate><description><![CDATA[一个非模板函数和一个模板函数同名是不会产生报错的，并且在调用函数时，如果两个函数都可以调用，那么编译器会优先调用非函数模板，如果模板可以产出一个匹配性更高的，就会选择模板。这就跟我们小时候在超市买冰棍模子，然后自己回家往模子里放料，再放冰箱，冻好后就成冰棍了，料是可乐就是可乐冰棍，料是雪碧，就是雪碧冰棍。虽然C++支持了函数重载，但是对于上面这段代码，看着还是觉得冗余，同样的功能，却要给不同类型分别写上对应的函数。这时候就体验了模板的好处了，我们只要写一个模板，然后让编译器推演类型自动生成对应的函数。]]></description><category></category></item><item><title><![CDATA[C++内存管理]]></title><link>https://blog.youkuaiyun.com/z85123789/article/details/129952592</link><guid>https://blog.youkuaiyun.com/z85123789/article/details/129952592</guid><author>z85123789</author><pubDate>Tue, 04 Apr 2023 16:53:10 +0800</pubDate><description><![CDATA[我们先来回顾一下C语言的内存管理内存分为这几个段：栈区：非静态的局部变量都是存在栈区的，它是向下增长的。堆区：用于程序运行时动态内存分配，它是向上增长的。数据段：存在全局变量和静态变量。代码段：可执行代码、常量。而在堆区动态内存开辟的函数有malloc、calloc、realloc。malloc和calloc的区别在于，前者开辟空间不初始化，而后者会初始化为0.realloc是扩容。C++是兼容C语言的，所以，它们两个的内存管理是差不多的。]]></description><category></category></item><item><title><![CDATA[C++中关于类和对象的一些细枝末节]]></title><link>https://blog.youkuaiyun.com/z85123789/article/details/129904780</link><guid>https://blog.youkuaiyun.com/z85123789/article/details/129904780</guid><author>z85123789</author><pubDate>Mon, 03 Apr 2023 22:13:07 +0800</pubDate><description><![CDATA[我们先来看看这段代码：
这里我们发现这两个都是拷贝构造，有两种实例化的方式，
但其实内部是不一样的，
第一个是把1传递给a的构造函数中，之后再把a这个对象中的成员变量赋值成1。
第二个是将1隐式类型转换成A类型，然后拷贝给b这个对象。
如果不想发生隐式类型转换就可以用explicit这个关键字来修饰，只需要在该类的构造函数前面加上explicit：

另外还补充一点：
Static成员变量
在学C语言时我们就知道被static修饰的变量叫静态变量，那么在类中，被static修饰的成员就叫静态成员，其中，如果]]></description><category></category></item><item><title><![CDATA[C++类和对象]]></title><link>https://blog.youkuaiyun.com/z85123789/article/details/129476323</link><guid>https://blog.youkuaiyun.com/z85123789/article/details/129476323</guid><author>z85123789</author><pubDate>Tue, 14 Mar 2023 18:13:30 +0800</pubDate><description><![CDATA[构造函数：内置类型得自己写，自定义类型不用写。析构函数：有资源要清理就写，否则不用。拷贝构造：要深拷贝就是自己写，浅拷贝用默认生成的。赋值重载：析构要写，那赋值重载就写，否则就不需要取地址和const取地址操作符：不需要自己写。]]></description><category></category></item><item><title><![CDATA[C++入门]]></title><link>https://blog.youkuaiyun.com/z85123789/article/details/129461704</link><guid>https://blog.youkuaiyun.com/z85123789/article/details/129461704</guid><author>z85123789</author><pubDate>Sun, 12 Mar 2023 11:36:07 +0800</pubDate><description><![CDATA[C++，全称：C Plus Plus，它是在C语言的基础上不断加东西加出来的，所以C++兼容于C。]]></description><category></category></item><item><title><![CDATA[C排序算法]]></title><link>https://blog.youkuaiyun.com/z85123789/article/details/129214153</link><guid>https://blog.youkuaiyun.com/z85123789/article/details/129214153</guid><author>z85123789</author><pubDate>Fri, 03 Mar 2023 17:44:18 +0800</pubDate><description><![CDATA[排序的概念
**排序**：就是将数据进行递增或者递减的操作。
还有一个**稳定性**的概念：在一组不有序的数组中，有两个相同的数据，排完序之后，左边那个依然在左边，右边那个依然在右边。]]></description><category></category></item><item><title><![CDATA[关于Linux基本权限]]></title><link>https://blog.youkuaiyun.com/z85123789/article/details/129203336</link><guid>https://blog.youkuaiyun.com/z85123789/article/details/129203336</guid><author>z85123789</author><pubDate>Sat, 25 Feb 2023 11:51:28 +0800</pubDate><description><![CDATA[对于文件夹来说，可读并不意味着可以直接查看该文件夹中的文件，要先有可执行权限，可执行是可以对该文件夹进行指令操作，其中就包括进入该文件夹，如果没有x（可执行）权限，那么哪怕有r（可读）权限也不能查看文件里的内容。起始权限是系统设定的，普通文件设定的起始权限默认是666，目录的起始权限默认是777，系统为了更好的控制权限，系统会有默认的权限掩码（umask)的概念。刚创建的new_dir第一个字母是d，表示它是一个文件夹，并且该目录的拥有者和所属组拥有可读可写可执行的权限，而其他人只有可读和可执行的权限。]]></description><category></category></item><item><title><![CDATA[【数据结构】二叉树及二叉树的基础oj练习]]></title><link>https://blog.youkuaiyun.com/z85123789/article/details/128592295</link><guid>https://blog.youkuaiyun.com/z85123789/article/details/128592295</guid><author>z85123789</author><pubDate>Mon, 09 Jan 2023 14:59:13 +0800</pubDate><description><![CDATA[在数组存储中我们发现：假设一个父节点在数组中的下标为i，并且有左右子树的情况下（左右子树都不为空），那么它的左子树下标为2i+1，右子树下标为2i+2，如果2i+1>=n（n为总结点数）,那么该节点没有左子树，同理，如果2i+2>=n，则该节点没有右子树。：如果一个节点含有子节点，则这个节点称为其子节点的双亲结点，如上图1是2的父节点，也是3的父节点。：具有相同父节点的子节点互称为兄弟节点，如上图中2，3都是1的子节点，2和3互为兄弟节点。：度为0的节点称为叶节点，例如上图中的4，5，6，7都是叶节点。]]></description><category></category></item><item><title><![CDATA[栈和队列、及Leetcode的循环队列和用栈模拟实现队列、用队列模拟实现栈]]></title><link>https://blog.youkuaiyun.com/z85123789/article/details/128151170</link><guid>https://blog.youkuaiyun.com/z85123789/article/details/128151170</guid><author>z85123789</author><pubDate>Mon, 05 Dec 2022 16:10:39 +0800</pubDate><description><![CDATA[栈，是一种特殊的线性表，只能在固定的一端进行增加删除数据，进行数据操作的一端叫做栈顶，另一端叫栈底，栈中的数据元素遵循后进先出LIFE（last in first out)的原则。
对栈的数据操作，其中栈顶放入数据叫做压栈，从栈顶出数据叫做出栈。
栈的定义

二、队列
1、队列的概念
它和栈差不多，只不过队列的数据操作是一头放入数据，另一头出数据，
放数据的那一头叫队尾，出数据的那一头叫对头，队列的数据元素遵循先进先出FIFE（first in first out）的原则。
队列的定义

三、Leetcod]]></description><category></category></item><item><title><![CDATA[LeetCode链表习题解析]]></title><link>https://blog.youkuaiyun.com/z85123789/article/details/127835999</link><guid>https://blog.youkuaiyun.com/z85123789/article/details/127835999</guid><author>z85123789</author><pubDate>Wed, 16 Nov 2022 16:17:40 +0800</pubDate><description><![CDATA[还是一样，设甲速度为n，乙速度为2n，环的周长为c，这次设环的第一个节点到相遇点的距离为n，直线的距离为l，则甲到相遇点走的路程是l+n，乙走的路程是l+k×c+n（其中k是圈数），时间相同，乙速度是甲的2倍，所以，2（l+n）=l+k×c+n，结果为l=k×c-n，得出，甲从起点出发，乙从相遇点出发，第一次相遇的点就是环的第一个节点。再回到这个题目中，我们可以创建两个指针，慢的指针一次走一步，快的指针走两步，这样，如果相遇则一定是环，否则快的指针一定会先走到NULL。所以，和练习一一样，用快慢指针来走。]]></description><category></category></item><item><title><![CDATA[关于预处理指令的讲解]]></title><link>https://blog.youkuaiyun.com/z85123789/article/details/127359851</link><guid>https://blog.youkuaiyun.com/z85123789/article/details/127359851</guid><author>z85123789</author><pubDate>Mon, 17 Oct 2022 21:30:15 +0800</pubDate><description><![CDATA[return 0;}在预编译期间，系统会自动把代码里的MAX替换成#define定义的MAX的值，就变成了：x + 2。这里要注意一点：定义的标识符后面最后不要写分号，可能会有bugint main(){int x = 3;x += MAX;return 0;}这个代码走进if语句，执行x += MAX，而（MAX == 2）；，替换之后就变成了（x += 2；；]]></description><category></category></item><item><title><![CDATA[C语言文件相关操作]]></title><link>https://blog.youkuaiyun.com/z85123789/article/details/127297187</link><guid>https://blog.youkuaiyun.com/z85123789/article/details/127297187</guid><author>z85123789</author><pubDate>Sat, 15 Oct 2022 11:07:40 +0800</pubDate><description><![CDATA[首先，我们要知道一个东西叫文件类型指针，简称“文件指针”，可以理解为是存放文件的指针，每个被使用的文件都会在内存中开辟出一个空间，叫文件信息区，用来存放文件的信息，比如名字，状态，当前位置。]]></description><category></category></item></channel></rss>