<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[a1937194471的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/a1937194471</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; a1937194471]]></copyright><item><title><![CDATA[Qt QWidget控件]]></title><link>https://blog.youkuaiyun.com/a1937194471/article/details/142679349</link><guid>https://blog.youkuaiyun.com/a1937194471/article/details/142679349</guid><author>a1937194471</author><pubDate>Thu, 03 Oct 2024 19:17:29 +0800</pubDate><description><![CDATA[widget翻译而来就是小控件，小部件。控件是指可以操纵的部件，下图Qt页面中的按钮, 列表视图, 树形视图, 单⾏输⼊框, 多⾏输⼊框, 滚动条, 下拉框等, 都可以称为 "控件".QWidget是所有窗口部件的基类，例如对话框类、主窗体类，以及其他诸如按钮、编辑框、标签等都由QWidget派生得到，所以QWidget的所有的方法往往都可以在其他子类当中使用二、QWidget核心属性属性作用enable设置控件是否可用，true表示可用，false表示不可用geometry。]]></description><category></category></item><item><title><![CDATA[set和map]]></title><link>https://blog.youkuaiyun.com/a1937194471/article/details/142481320</link><guid>https://blog.youkuaiyun.com/a1937194471/article/details/142481320</guid><author>a1937194471</author><pubDate>Thu, 26 Sep 2024 22:04:09 +0800</pubDate><description><![CDATA[map和set与以往容器不同的是它是关联式容器，而vector、list、deque是序列式容器，序列式容器是以线性排列的方式来存储数据的，元素在容器中的位置与插入顺序有关，其实底层是顺序表和链表。而map和set底层是二叉搜索树，更深入点讲是红黑树，元素在容器中的位置与插入顺序无关，因为有可能经过红黑树旋转改变原先的位置。与别的容器不同的是set会自动排序和去重set值得注意的第二点是set不支持修改，只能删后重新插入。因为底层是红黑色，直接进行修改会直接破坏红黑树和二叉搜索树的规则。]]></description><category></category></item><item><title><![CDATA[红黑树构建模拟实现]]></title><link>https://blog.youkuaiyun.com/a1937194471/article/details/142336652</link><guid>https://blog.youkuaiyun.com/a1937194471/article/details/142336652</guid><author>a1937194471</author><pubDate>Thu, 19 Sep 2024 14:23:26 +0800</pubDate><description><![CDATA[红黑树也是一种二叉搜索树，在二叉搜索树的基础上它也定义了一些规则来使平衡树相对平衡。AVL树是通过左右高度差（平衡因子）来控制搜索树的平衡，构建出来是非常接近完全二叉树和满二叉树的树。而红黑树是一种相对平衡，最长路径不超过最短路径的两倍就可以了，红黑树在每个结点上增加一个存储位表示节点的颜色，可以是红色也可以是黑色，通过对任何一条从根到叶子的路径上各个节点着色方式的限制，红黑色树确保没有一条路径会比其他路径长出两倍，从而达到相对平衡。]]></description><category></category></item><item><title><![CDATA[Qt构建JSON及解析JSON]]></title><link>https://blog.youkuaiyun.com/a1937194471/article/details/142312542</link><guid>https://blog.youkuaiyun.com/a1937194471/article/details/142312542</guid><author>a1937194471</author><pubDate>Tue, 17 Sep 2024 23:14:09 +0800</pubDate><description><![CDATA[一般来讲C++类和对象在java中是无法直接直接使用的，因为压根就不是一个规则。但是他们在内存中都是二进制表示的，所以把C++的类和对象转成二进制再按照java的规则解析这段二进制代码就可以做到C++描述的东西在java中复现了。]]></description><category></category></item><item><title><![CDATA[AVL树调整平衡及旋转详解]]></title><link>https://blog.youkuaiyun.com/a1937194471/article/details/141673219</link><guid>https://blog.youkuaiyun.com/a1937194471/article/details/141673219</guid><author>a1937194471</author><pubDate>Wed, 04 Sep 2024 18:50:23 +0800</pubDate><description><![CDATA[AVl树算是二叉搜索树的一种补充版，普通的二叉搜索树在最坏的情况下可以达到O（n）的时间复杂度，也就是歪脖子树。为了解决二叉搜索树的歪脖子现象，需要对插入的节点进行调整以达到相对平衡，这种经过调整的二叉搜索树叫二叉平衡树，而AVl树是平衡树的一种。AVl树总的来说就是所有节点的左右子树高度差不超过1所以AVL树有两个性质，第一必须满足二叉搜索树的规则，也就是所有节点的右边子树节点值都比根节点值大，左边节点值都比根节点值小。第二所以节点左右子树高度差（通常称为平衡因子）不超过1。]]></description><category></category></item><item><title><![CDATA[二叉搜索树]]></title><link>https://blog.youkuaiyun.com/a1937194471/article/details/141497065</link><guid>https://blog.youkuaiyun.com/a1937194471/article/details/141497065</guid><author>a1937194471</author><pubDate>Sat, 24 Aug 2024 20:09:41 +0800</pubDate><description><![CDATA[二叉搜索树也叫二叉排序树,搜索二叉树，与普通的二叉树相比二叉搜索树满足所有节点右孩子值都比根节点值大，左孩子值都比根节点值小。下图中第一个二叉树5是10的右孩子但是值比10小，所以不满足二叉搜索树的规则下图是一个完整的二叉搜索树，如果使用中序遍历的话会发现正好是有序的1,3，4,6,7,8,10,13,14，这也就是为什么二叉搜索树也叫做二叉排序树。]]></description><category></category></item><item><title><![CDATA[stl容器适配器 stack与queue，priority_queue]]></title><link>https://blog.youkuaiyun.com/a1937194471/article/details/141269748</link><guid>https://blog.youkuaiyun.com/a1937194471/article/details/141269748</guid><author>a1937194471</author><pubDate>Wed, 21 Aug 2024 14:42:33 +0800</pubDate><description><![CDATA[值得注意的是模拟的进队列函数直接进第一个栈就行，出队列和取栈顶元素把第一个栈的元素倒着插入第二个栈时要考虑第二栈是否为空，只有为空的时候才能挪动第一个栈的数据。库里的实现要复杂一点（见下图），cur是当前节点位置，first是内存块的开始位置，last是末尾数据的下一位，当遍历访问的时候cur从first开始挨个往后挪动，当cur等于last时说明这个内存块访问完了，中控那里的node节点位置++，找到下一个内存块的地址，然后cur重新赋值为新内存块first地址，从头开始往后找。]]></description><category></category></item><item><title><![CDATA[list使用及底层模拟实现]]></title><link>https://blog.youkuaiyun.com/a1937194471/article/details/141092513</link><guid>https://blog.youkuaiyun.com/a1937194471/article/details/141092513</guid><author>a1937194471</author><pubDate>Wed, 14 Aug 2024 00:29:28 +0800</pubDate><description><![CDATA[/指向存放字符串的空间，size_t _size;传一个const T过去不就行了，这样写其实是会报错的，这是因为迭代器的构造函数    iteratorlist(Node<T> *node):_node(node)这时候这个T类型实际上是const  T,但是list当中begin和end传过来构造的节点可是T类型，举个例子list当中要求生成int类型的迭代器，可是迭代器当中是const int,这种没有什么权限缩小可以兼容使用，模版推演是严格遵守规则的（一点不同都生成不了），所以迭代器会生成失败。]]></description><category></category></item><item><title><![CDATA[vector底层模拟实现]]></title><link>https://blog.youkuaiyun.com/a1937194471/article/details/140897232</link><guid>https://blog.youkuaiyun.com/a1937194471/article/details/140897232</guid><author>a1937194471</author><pubDate>Tue, 06 Aug 2024 23:15:23 +0800</pubDate><description><![CDATA[具体的挪动数据操作，end必须在finish-1上，不能在finish上，finish位置上是无效数据（有可能是随机值）， 即使空间容量足够也不能挪动这个位置上的数据。finish此时还指向旧空间，start已经确定了，finish是不能直接一步到位指向有效字符的下一个的，所以用上了之前保存的oldsize，oldsize是原来的有效字符个数，start加上start就是finish的位置，因为我的有效字符size压根就没改变，在新空间里finish和start也会保持这种相对位置关系。]]></description><category></category></item><item><title><![CDATA[stl容器 vector的基本操作]]></title><link>https://blog.youkuaiyun.com/a1937194471/article/details/140872849</link><guid>https://blog.youkuaiyun.com/a1937194471/article/details/140872849</guid><author>a1937194471</author><pubDate>Sun, 04 Aug 2024 12:00:00 +0800</pubDate><description><![CDATA[vector是vector类模版类型，尖括号里的类型是指生成什么类型的vector的类，实质上vector可以看做一个数组，vector实质上就是生成了一个存int类型的数组，而tamp是这个数组的名字。这样默认构造是默认构造了一个空的vector数组，类型不是int，而是vector因为是尖括号里是模板所以也可以使用别的类型来构造函数，比如string，这样生成的就是string类型的数组了。]]></description><category></category></item><item><title><![CDATA[C++多态]]></title><link>https://blog.youkuaiyun.com/a1937194471/article/details/140588203</link><guid>https://blog.youkuaiyun.com/a1937194471/article/details/140588203</guid><author>a1937194471</author><pubDate>Sun, 28 Jul 2024 21:35:24 +0800</pubDate><description><![CDATA[多态是在不同继承关系的类对象，去调用同一对象，产生了不同的行为。比如Student继承了person。person对象买票全价，Student对象买票半价那么在继承中要构成多态还有两个条件：1.必须通过基类的指针或者引用调用虚函数2.被调用的函数必须是虚函数（被virtual修饰的函数），且派生类必须对基类的虚函数进行重写2.2虚函数的重写。]]></description><category></category></item><item><title><![CDATA[继承和派生]]></title><link>https://blog.youkuaiyun.com/a1937194471/article/details/140438714</link><guid>https://blog.youkuaiyun.com/a1937194471/article/details/140438714</guid><author>a1937194471</author><pubDate>Sat, 20 Jul 2024 16:41:02 +0800</pubDate><description><![CDATA[继承机制是面向对象程序设计使代码可以复用的重要手段，它允许程序员在保持原有类基础上进行扩展，增加功能，产生新类，称为派生类。继承呈现了面向对象程序设计的层次结构，体现了由简单到复杂的认知的过程。以前接触的复用都是函数复用，比如重载，而继承是类设计层次的复用。继承的类与被继承的类也被叫做子类与父类或者派生类与基类，继承这一概念用子类与父类来通俗一点来讲的话就是儿子继承父亲的财产，儿子可以用父亲的东西比如公司，但是儿子在继承之前也许创业开了新公司，这个新公司与父亲没有什么关系。]]></description><category></category></item><item><title><![CDATA[string类模拟实现]]></title><link>https://blog.youkuaiyun.com/a1937194471/article/details/139104872</link><guid>https://blog.youkuaiyun.com/a1937194471/article/details/139104872</guid><author>a1937194471</author><pubDate>Fri, 24 May 2024 23:23:12 +0800</pubDate><description><![CDATA[str是一个指向存放字符串空间的指针，new出来的空间是用来存传过来字符串的，new的空间+1是为了存\0,库里面capacity（）和size（）是不计算\0大小的，虽然它不计算，但是还是要开空间存它的。起始迭代器begin和末尾迭代器end就直接用函数来表示，起始迭代器指向字符串的第一个字符位置，末尾迭代器指向最后一个字符的后一个位置（也可以看做指向\0），_size构造函数构造的时候是没有把\0给算进去的，实际上是有效字符个数，但是最后一个有效字符数组里面下标其实是_size-1。]]></description><category></category></item><item><title><![CDATA[stl容器 string类的基本操作]]></title><link>https://blog.youkuaiyun.com/a1937194471/article/details/138444988</link><guid>https://blog.youkuaiyun.com/a1937194471/article/details/138444988</guid><author>a1937194471</author><pubDate>Sun, 05 May 2024 23:02:42 +0800</pubDate><description><![CDATA[string类在使用的时候要包括头文件#include]]></description><category></category></item><item><title><![CDATA[函数模板与类模板初阶]]></title><link>https://blog.youkuaiyun.com/a1937194471/article/details/138214706</link><guid>https://blog.youkuaiyun.com/a1937194471/article/details/138214706</guid><author>a1937194471</author><pubDate>Fri, 26 Apr 2024 20:05:04 +0800</pubDate><description><![CDATA[如果要写一个交换函数，不同类型的话调用不同的交换函数，如果使用重载的话只能解决函数名相同但是会根据参数类型调用不同的函数。即使这样也依旧要写很多不同类型的swap交换函数函数重载的交换函数仔细观察会发现除了类型不同其他的函数结构什么的都一样，都是定义中间变量，然后用它作为过渡交换其他的两个变量。因此可以用C++模版的知识，告诉编译器一个模子，让编译器根据不同类型 利用该模子来生成代码。其实本质上还是写了三个函数，只是模版是让编译器帮你写而已。]]></description><category></category></item><item><title><![CDATA[C++内存分布 new和delete介绍]]></title><link>https://blog.youkuaiyun.com/a1937194471/article/details/138186843</link><guid>https://blog.youkuaiyun.com/a1937194471/article/details/138186843</guid><author>a1937194471</author><pubDate>Fri, 26 Apr 2024 11:53:15 +0800</pubDate><description><![CDATA[C++的内存分布，大体上分为栈区 堆区  静态区 常量区。]]></description><category></category></item><item><title><![CDATA[C++类和对象（下）]]></title><link>https://blog.youkuaiyun.com/a1937194471/article/details/138085992</link><guid>https://blog.youkuaiyun.com/a1937194471/article/details/138085992</guid><author>a1937194471</author><pubDate>Wed, 24 Apr 2024 23:32:32 +0800</pubDate><description><![CDATA[的。]]></description><category></category></item><item><title><![CDATA[C++类和对象（上）]]></title><link>https://blog.youkuaiyun.com/a1937194471/article/details/137993918</link><guid>https://blog.youkuaiyun.com/a1937194471/article/details/137993918</guid><author>a1937194471</author><pubDate>Sun, 21 Apr 2024 19:46:21 +0800</pubDate><description><![CDATA[C++是面向对象的语言，对象其实可理解成客观事物，C++是面向过程的语言，他注重的是一步步过程。比如把一头大象塞进冰箱，C语言执行过程有三步，打开冰箱门，把大象塞进去，然后关上冰箱门。C++只关注对象，把大象塞进冰箱，有三个对象，人和大象以及冰箱，整个过程是人，大象，冰箱三个对象之间交互完成的，人不需要关注大象是怎么塞进冰箱的，冰箱是怎么关门的。在面向过程的编程中，程序员需要关注每一个步骤和细节，手动控制整个过程的执行。]]></description><category></category></item><item><title><![CDATA[C++入门]]></title><link>https://blog.youkuaiyun.com/a1937194471/article/details/137797265</link><guid>https://blog.youkuaiyun.com/a1937194471/article/details/137797265</guid><author>a1937194471</author><pubDate>Wed, 17 Apr 2024 19:18:19 +0800</pubDate><description><![CDATA[命名空间需要namespace关键字，然后后面加上命名空间名，接上一对括号，括号里面可以定义各种变量甚至函数如下定义命名空间。]]></description><category></category></item><item><title><![CDATA[排序：冒泡排序，直接插入排序，简单选择排序，希尔排序，快速排序，堆排序，二路归并排序]]></title><link>https://blog.youkuaiyun.com/a1937194471/article/details/137124287</link><guid>https://blog.youkuaiyun.com/a1937194471/article/details/137124287</guid><author>a1937194471</author><pubDate>Tue, 09 Apr 2024 16:02:28 +0800</pubDate><description><![CDATA[前面的指针因为要保持数组的前半部分都小于基准值，所以遇到小于等于基准值的就直接跳过，往后走，直到找到大于基准值的元素。快速排序最好的情况是每一次划分都将n个元素划分为两个长度差不多相同的子区间，均匀二分也就是说每次划分所取的基准都是中值元素，划分的结果是基准的左,右两个无序子区间的长度大致相等，这样递归树高度为logn，而每一层划分的时间为O（n），因为需要遍历n个元素来进行比较和交换，虽然代码中是两重循环，但是l与r运行加起来最多也才整个数组的长度n，所以此时时间复杂度为O（nlogn）]]></description><category></category></item></channel></rss>