<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[a15980352273的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/a15980352273</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; a15980352273]]></copyright><item><title><![CDATA[C++中的多态]]></title><link>https://blog.youkuaiyun.com/a15980352273/article/details/125360356</link><guid>https://blog.youkuaiyun.com/a15980352273/article/details/125360356</guid><author>a15980352273</author><pubDate>Wed, 22 Jun 2022 22:29:02 +0800</pubDate><description><![CDATA[    多态就是不同继承关系的类对象，调用同一个函数得到不同结果的行为，就如同成人和学生去买票，成人买的是成人票，学生买的是学生票。继承要实现需要满足两个条件：(1)必须通过基类的指针或者引用调用虚函数。(2)调用的函数必须是virtual修饰的虚函数。具体可见下图：
    虚函数重写就是派生类中有一个和基类完全相同的虚函数(即派生类虚函数与基类虚函数的返回值类型。函数名字，参数列表完全相同)，称子类的虚函数重写了基类的虚函数。具体代码如下：
1.3、虚函数重写的两个例外
    虚函数的重写有两个例外：]]></description><category></category></item><item><title><![CDATA[C++类和对象总结(三)]]></title><link>https://blog.youkuaiyun.com/a15980352273/article/details/125310758</link><guid>https://blog.youkuaiyun.com/a15980352273/article/details/125310758</guid><author>a15980352273</author><pubDate>Thu, 16 Jun 2022 15:27:54 +0800</pubDate><description><![CDATA[    初始化列表就是在构造函数后面以冒号为开始，用逗号做分隔成员变量进行初始化的方法，具体操作如下：
1.2、初始化列表特性
    （1）每个成员变量在初始化列表中只出现一次。
    （2）引用成员变量，const成员变量，自定义类型的成员变量都必须放到初始化列表进行初始化。具体实例如下：
2、explicit关键字
    explicit关键字用于防止隐式类型转换，具体可见如下代码：
    上述代码中d1=2019这行代码，编译器首先会用2019这int类型数字，自动构造出一个Date类型的对象]]></description><category></category></item><item><title><![CDATA[C++面向对象总结(二)]]></title><link>https://blog.youkuaiyun.com/a15980352273/article/details/125298421</link><guid>https://blog.youkuaiyun.com/a15980352273/article/details/125298421</guid><author>a15980352273</author><pubDate>Thu, 16 Jun 2022 09:57:47 +0800</pubDate><description><![CDATA[    类中包含6个默认成员函数，分别为(1)构造函数 (2)析构函数 (3)拷贝构造函数 (4)赋值运算符重载函数 (5)const修饰的成员函数 (6)取地址及const取地址操作符重载，这6个默认成员函数就算我们不写，编译器也会自动生成。    构造函数的函数名和类名相同，并且没有返回值，在实例化对象时会自动调用，并且只会调用一次，用于初始化成员变量。具体看如下代码：
    上述代码中，我们可以通过person的构造函数，给对象小明进行初始化，我们可以得到对象xiaomin的name =  “小明”]]></description><category></category></item><item><title><![CDATA[C++面向对象总结(一)]]></title><link>https://blog.youkuaiyun.com/a15980352273/article/details/125291886</link><guid>https://blog.youkuaiyun.com/a15980352273/article/details/125291886</guid><author>a15980352273</author><pubDate>Wed, 15 Jun 2022 15:30:32 +0800</pubDate><description><![CDATA[    面向过程：主要关注的是做什么，怎么做的这个过程，比如：吃饭()，睡觉()，打游戏()这些过程
    面向对象：主要关注的是对象，把对象作为基本单位，靠对象可以实现很多工作(过程)，比如：小红.打游戏()，小红.吃饭()，洗衣机.洗衣服()等等    类是面向对象的基础，而类的实现可以通过class关键字实现，类中包含类的成员变量和成员函数，具体使用方法如下代码：
    其中classname可以自己定义，作为类的名称，而int a 和int b为成员变量，void fun()为成员函数。    ]]></description><category></category></item><item><title><![CDATA[C++基础知识二]]></title><link>https://blog.youkuaiyun.com/a15980352273/article/details/125278469</link><guid>https://blog.youkuaiyun.com/a15980352273/article/details/125278469</guid><author>a15980352273</author><pubDate>Tue, 14 Jun 2022 15:06:25 +0800</pubDate><description><![CDATA[    引用就是给变量去别名，不会新开辟空间，引用和被引用对象使用同一个空间。具体使用方法如下：
1.2、引用特性
    （1）引用必须需要初始化
    （2）一个变量可以被多次引用
    （3）常引用，引用者const修饰的变量或常数时，需在前面加入const
    （4）可以引用传参或将引用作为返回值    1、指针是一个变量，存储的是变量(对象)的地址，引用是变量的别名
    2、指针可以为空，引用定义时必须初始化
    3、指针在初始化之后可以改变指向，引用在初始化之后不可在改变
   ]]></description><category></category></item><item><title><![CDATA[C++基础知识一]]></title><link>https://blog.youkuaiyun.com/a15980352273/article/details/125273579</link><guid>https://blog.youkuaiyun.com/a15980352273/article/details/125273579</guid><author>a15980352273</author><pubDate>Tue, 14 Jun 2022 15:05:26 +0800</pubDate><description><![CDATA[    在C/C++中存在大量变量，函数和类的名称，难免有相同的命名，导致不同的函数或者变量不同但是名字相同就会导致很多命名冲突。为了避免这些命名冲突或名字污染，因此就引入了namespace关键字。    namespace关键字j的具体使用方法如下：(1)普通定义 (2)嵌套定义
1.2、namespace使用
    namespace关键字的使用方法如下：(1)通过using关键词引入全局 (2)在函数提内直接使用
2、C++中的输入输出
    C++中的输入输出分别可以通过cin和cout进行实]]></description><category></category></item><item><title><![CDATA[IP协议报文]]></title><link>https://blog.youkuaiyun.com/a15980352273/article/details/125189443</link><guid>https://blog.youkuaiyun.com/a15980352273/article/details/125189443</guid><author>a15980352273</author><pubDate>Wed, 08 Jun 2022 17:47:55 +0800</pubDate><description><![CDATA[IP协议报文]]></description><category></category></item><item><title><![CDATA[TCP/UDP报文格式及各种通信机制简介]]></title><link>https://blog.youkuaiyun.com/a15980352273/article/details/125035711</link><guid>https://blog.youkuaiyun.com/a15980352273/article/details/125035711</guid><author>a15980352273</author><pubDate>Mon, 30 May 2022 22:00:12 +0800</pubDate><description><![CDATA[TCP/UDP报文及各种通信机制简介一、UDP报文二、TCP报文三、TCP通信机制1，确认应答机制2，超时重传机制3，滑动窗口及快重传机制4，流量控制5，拥塞控制及慢启动机制6，延迟应答7，捎带应答四、总结
一、UDP报文
    UDP报文结构如下图所示：

    UDP报文中包含 ：（1） 16位源端口和目的端口，用于表示自己的端口号和将要发送的目的端口号。 （2） 16位UDP长度，表示8字节报头和UDP数据的总长度，用于确定报文长度。 （3） 16位校验和，用于在接收端对比校验，确定接收的UDP报]]></description><category></category></item><item><title><![CDATA[定长内存池]]></title><link>https://blog.youkuaiyun.com/a15980352273/article/details/124257602</link><guid>https://blog.youkuaiyun.com/a15980352273/article/details/124257602</guid><author>a15980352273</author><pubDate>Mon, 18 Apr 2022 20:37:19 +0800</pubDate><description><![CDATA[定长内存池一、前言二、定长内存池简介三、定长内存池成员变量及成员函数声名四、成员函数定义五、效率分析
一、前言
    内存池化技术简单来说就是提前向系统申请一大块空间，后面需要空间的时候直接去大块空间中取，就不用频繁的向系统要，降低系统频繁建连的资源开销。如你要去河边挑水喝，每次想喝的时候都得去河边挑水，但如果你在加旁边挖一个小池塘，你直接把谁灌进去，下次你要喝水的时候就不用去河边挑水，直接在家门口就能喝到，这就很方便。
二、定长内存池简介
    定长内存池就是内存池被申请后被提前分块，每次获取的小内存]]></description><category></category></item><item><title><![CDATA[http协议的简单理解]]></title><link>https://blog.youkuaiyun.com/a15980352273/article/details/123943451</link><guid>https://blog.youkuaiyun.com/a15980352273/article/details/123943451</guid><author>a15980352273</author><pubDate>Thu, 14 Apr 2022 18:00:36 +0800</pubDate><description><![CDATA[http协议的简单理解1、http协议简介2、认识url3、http请求及响应3.1 模拟实现一个简单服务器3.2 请求方法3.2.1 GET3.2.2 POST
1、http协议简介
   http协议又称超文本传输协议，是一种用于分布式、协作式和超媒体信息系统的应用层协议。简单来说就是一个客户端终端（用户）和服务器端（网站）请求和应答的标准,它定义了web客户端如何从web服务器请求web页面，以及服务器如何把web页面传送给客户端。
2、认识url
   url就是我们常说的网址，其中包含着协议名，登]]></description><category></category></item><item><title><![CDATA[二叉搜索(排序)树]]></title><link>https://blog.youkuaiyun.com/a15980352273/article/details/121947182</link><guid>https://blog.youkuaiyun.com/a15980352273/article/details/121947182</guid><author>a15980352273</author><pubDate>Wed, 15 Dec 2021 15:42:37 +0800</pubDate><description><![CDATA[二叉搜索树二叉搜索树简介二级目录三级目录
二叉搜索树简介
二级目录
三级目录

]]></description><category></category></item><item><title><![CDATA[哈希表的简单理解]]></title><link>https://blog.youkuaiyun.com/a15980352273/article/details/121815829</link><guid>https://blog.youkuaiyun.com/a15980352273/article/details/121815829</guid><author>a15980352273</author><pubDate>Tue, 14 Dec 2021 17:19:32 +0800</pubDate><description><![CDATA[哈希表的简单理解一、哈希表简介二、哈希表的映射方式1、直接定值法2、除留余数法2.1、负载因子a2.2、哈希冲突三、哈希表种类1、闭散列1、开散列
一、哈希表简介
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;哈希(散列)表可以看成一个数组，在存入数值或元素的时候通过映射关系，找到数组对应的位置就可以将元素存入数组中，这样在不存在哈希冲突情况下，查找该元素的效率为O(1)。
二、哈希表的映射方式
1、直接定值法

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如上图所示，直接定值]]></description><category></category></item><item><title><![CDATA[C++中的继承]]></title><link>https://blog.youkuaiyun.com/a15980352273/article/details/120583665</link><guid>https://blog.youkuaiyun.com/a15980352273/article/details/120583665</guid><author>a15980352273</author><pubDate>Sat, 02 Oct 2021 11:47:15 +0800</pubDate><description><![CDATA[继承继承简介继承方式多继承继承中的问题1、基类和子类成员同名会怎样?2、基类中的友元函数，子类能继承没?3、继承中基类和子类，构造析构顺序4、多继承造成的菱形继承问题
继承简介

&nbsp;&nbsp;&nbsp;&nbsp;继承就子类继承父类或基类的全部成员函数和成员变量，而且在此基础上继承的子类还可以自己添加自己的成员，如上图所示，子类1，不仅继承了父类的_name和_status_num，而且自身还添加了一个_sex，子类2则多了_is_student，这个与类和对象有点像，只不过这个对象也使类，而]]></description><category></category></item><item><title><![CDATA[模拟实现一个简单shell]]></title><link>https://blog.youkuaiyun.com/a15980352273/article/details/120578938</link><guid>https://blog.youkuaiyun.com/a15980352273/article/details/120578938</guid><author>a15980352273</author><pubDate>Fri, 01 Oct 2021 17:07:46 +0800</pubDate><description><![CDATA[模拟实现一个简单shell
&nbsp;&nbsp;&nbsp;&nbsp;程序涉及的关键函数有fgets()，strtok()，execvp()，waitpid()，不知道这么使用可自行查找使用方法，fgets()函数用于把写入的命令输入到字符数组中，strtok()函数则是把fgets()收集到的字符根据空白格分割到不同的字符数组中，execvp()函数，进行进程替换，此时子进程不和父进程共用代码，也不新创建新进程，子进程重新在内存中写入execvp()函数要执行的代码，代码结束子进程结束，waitpi]]></description><category></category></item><item><title><![CDATA[Linux中的进程等待]]></title><link>https://blog.youkuaiyun.com/a15980352273/article/details/120578253</link><guid>https://blog.youkuaiyun.com/a15980352273/article/details/120578253</guid><author>a15980352273</author><pubDate>Fri, 01 Oct 2021 16:48:54 +0800</pubDate><description><![CDATA[Linux中的进程等待为什么需要进程等待进程等待方法wait()函数waitpid()函数阻塞等待与非阻塞等待
为什么需要进程等待
&nbsp;&nbsp;&nbsp;&nbsp;我们都知道子进程退出后(kill掉)，父进程还在时，子进程会变成僵尸进程，会造成内存泄漏，而进程等待，就是用来等待父进程回收清理子进程的空间，和查看子进程完成任务的情况(就是查看退出码)的过程。
进程等待方法
&nbsp;&nbsp;&nbsp;&nbsp;父进程可以通过两个函数来获得子进程退出情况，这两个函数分别是wait()和]]></description><category></category></item><item><title><![CDATA[进程地址空间(虚拟地址)与物理内存]]></title><link>https://blog.youkuaiyun.com/a15980352273/article/details/120390855</link><guid>https://blog.youkuaiyun.com/a15980352273/article/details/120390855</guid><author>a15980352273</author><pubDate>Mon, 20 Sep 2021 15:30:07 +0800</pubDate><description><![CDATA[进程地址空间(虚拟地址)与物理内存
&nbsp;&nbsp;&nbsp;&nbsp;首先我们先看一段代码，如下:
 #include &lt;stdio.h&gt;
  2 #include &lt;unistd.h&gt;
  3 
  4 int val = 10;//全局变量存在静态区
  5 
  6 int main()
  7 {
  8  pid_t id =  fork();
  9   while(1)
 10   {
 11     if(id == 0)//子进程
 12     {
]]></description><category></category></item><item><title><![CDATA[Vector和List容器的区别]]></title><link>https://blog.youkuaiyun.com/a15980352273/article/details/119955764</link><guid>https://blog.youkuaiyun.com/a15980352273/article/details/119955764</guid><author>a15980352273</author><pubDate>Fri, 27 Aug 2021 16:49:19 +0800</pubDate><description><![CDATA[Vector和List容器的区别
&nbsp;&nbsp;&nbsp;&nbsp;Vector和List都是STL常见的容器，都能存储不同类型的变量，那么有了Vector容器为什么还需要List容器呢！其实它们各有个的优点，如下列表格所示




容器
Vector
List




底层结构
动态顺序表，是一个连续的存储空间
带头节点的双向循环链表


访问方式
随机访问，访问某个节点的时间复杂度是O(1)
不支持随机访问，访问某个节点需要从头节点往后遍历，时间复杂度为O(n)


插入删除
插入和删除效]]></description><category></category></item><item><title><![CDATA[Vector迭代器失效问题]]></title><link>https://blog.youkuaiyun.com/a15980352273/article/details/119953047</link><guid>https://blog.youkuaiyun.com/a15980352273/article/details/119953047</guid><author>a15980352273</author><pubDate>Fri, 27 Aug 2021 15:37:46 +0800</pubDate><description><![CDATA[Vector迭代器失效问题迭代器意义发生改变野指针报错
迭代器意义发生改变
&nbsp;&nbsp;&nbsp;&nbsp;我们在使用Vector迭代器的时候可能遇到迭代器失效的问题，使结果达不到我们预期的效果，首先就是迭代器意义发生改变的问题，我们看下面代码。
#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;

int main()
{
	vector&lt;int&gt; v{1,2,2,4,5,6,7};
	v]]></description><category></category></item><item><title><![CDATA[String类模拟实现，遍历方式以及深浅拷贝问题]]></title><link>https://blog.youkuaiyun.com/a15980352273/article/details/119939426</link><guid>https://blog.youkuaiyun.com/a15980352273/article/details/119939426</guid><author>a15980352273</author><pubDate>Thu, 26 Aug 2021 21:41:44 +0800</pubDate><description><![CDATA[@String类遍历方式以及深浅拷贝问题
#String类的三种遍历方式
&nbsp; &nbsp;法一:for循环遍历
		string v("abcdefg");
		for(int i = 0; i &lt; v.size(); i++)
		{
 		     cout&lt;&lt; v[i] &lt;&lt;endl;
		}

&nbsp; &nbsp;法二:迭代器遍历
		string v("abcdefg");
		string::iterator it = v.begin();
		wh]]></description><category></category></item><item><title><![CDATA[压缩感知（CS）]]></title><link>https://blog.youkuaiyun.com/a15980352273/article/details/117701221</link><guid>https://blog.youkuaiyun.com/a15980352273/article/details/117701221</guid><author>a15980352273</author><pubDate>Tue, 08 Jun 2021 14:51:11 +0800</pubDate><description><![CDATA[研究意义
  在进行A/D转换过程中，我们常用奈奎斯特采样定理采样数据，也就是当采样频率fs大于原信号中最高频率fmax的2倍时，采样之后的数字信号完整地保留了原始信号中的信息。而在压缩感知中，信号可以以较低的频率（远低于奈奎斯特采样频率，且它的采样频率将取决于两个基本准则:稀疏性和非相关性，或者稀疏性和等距约束性）采样该信号，并可能以高概率精确的重建该信号。
  也就是说假如根据奈奎斯特采样定理，需要用1000个点恢复信号，而在压缩感知中只需要300个点（不固定，反正比1000少就对了），从而实现压缩效果]]></description><category></category></item></channel></rss>