<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[chen_hard的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/chen_hard</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; chen_hard]]></copyright><item><title><![CDATA[C++的类型转换]]></title><link>https://blog.youkuaiyun.com/chen_hard/article/details/119855362</link><guid>https://blog.youkuaiyun.com/chen_hard/article/details/119855362</guid><author>chen_hard</author><pubDate>Sun, 22 Aug 2021 20:52:12 +0800</pubDate><description><![CDATA[C语言中的类型转换 

在C语言中，如果赋值运算符左右两侧类型不同，或者形参与实参类型不匹配，或者返回值类型与接收返回值类型不一致时，就需要发生类型转化，C语言中总共有两种形式的类型转换：

	隐式类型转换

		编译器在编译阶段自动进行，能转就转，不能转就编译失败
		
		显式类型转换
		需要用户自己处理
		
	

void Test ()
{
 int i = 1;
 // 隐式类型转换
 double d = i;
 printf("%d, %.2f\n" , i, d);
 int* p = ]]></description><category></category></item><item><title><![CDATA[C++智能指针]]></title><link>https://blog.youkuaiyun.com/chen_hard/article/details/119852970</link><guid>https://blog.youkuaiyun.com/chen_hard/article/details/119852970</guid><author>chen_hard</author><pubDate>Sun, 22 Aug 2021 15:53:11 +0800</pubDate><description><![CDATA[内存泄漏


什么是内存泄漏，内存泄漏的危害？

	什么是内存泄漏：内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失，而是应用程序分配某段内存后，因为设计错误，失去了对该段内存的控制，因而造成了内存的浪费。
		内存泄漏的危害：长期运行的程序出现内存泄漏，影响很大，如操作系统、后台服务等等，出现内存泄漏会导致响应越来越慢，最终卡死。
	


内存泄漏分类

C/C++程序中一般我们关心两种方面的内存泄漏： 

	堆内存泄漏(Heap leak) 

		堆]]></description><category></category></item><item><title><![CDATA[C++异常]]></title><link>https://blog.youkuaiyun.com/chen_hard/article/details/119852100</link><guid>https://blog.youkuaiyun.com/chen_hard/article/details/119852100</guid><author>chen_hard</author><pubDate>Sun, 22 Aug 2021 15:10:02 +0800</pubDate><description><![CDATA[C语言传统的处理错误的方式

传统的错误处理机制： 

	终止程序，如assert，缺陷：用户难以接受。如发生内存错误，除0错误时就会终止程序。 
		返回错误码，缺陷：需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是通过把错误码放到errno中，表示错误 
		C 标准库中setjmp和longjmp组合。这个不是很常用，了解一下 
	

实际中C语言基本都是使用返回错误码的方式处理错误，部分情况下使用终止程序处理非常严重的错误。
C++异常概念

异常是一种处理错误的方式，当一个函数发现自己]]></description><category></category></item><item><title><![CDATA[哈希的应用]]></title><link>https://blog.youkuaiyun.com/chen_hard/article/details/119841756</link><guid>https://blog.youkuaiyun.com/chen_hard/article/details/119841756</guid><author>chen_hard</author><pubDate>Sat, 21 Aug 2021 17:56:04 +0800</pubDate><description><![CDATA[哈希是查询效率最高的算法，那么它有哪些应用呢？

最常见的应用就是位图了！

位图：

位图概念

	所谓位图，就是用每一位来存放某种状态，适用于海量数据，数据无重复的场景。通常是用来判断某个数据存不存在的。
		数据是否在给定的整形数据中，结果是在或者不在，刚好是两种状态，那么可以使用一个二进制比特位来代表数据是否存在的信息，如果二进制比特位为1，代表存在，为0代表不存在。比如:
	


位图的应用

	快速查找某个数据是否在一个集合中 
		排序 
		求两个集合的交集、并集等 
		操作系统中磁盘块标]]></description><category></category></item><item><title><![CDATA[哈希的概念]]></title><link>https://blog.youkuaiyun.com/chen_hard/article/details/119839951</link><guid>https://blog.youkuaiyun.com/chen_hard/article/details/119839951</guid><author>chen_hard</author><pubDate>Sat, 21 Aug 2021 16:43:03 +0800</pubDate><description><![CDATA[unordered系列关联式容器




在C++98中，STL提供了底层为红黑树结构的一系列关联式容器，在查询时效率可达到，即最差情况下需要比较红黑树的高度次，当树中的节点非常多时，查询效率也不理想。最好的查询是，进行很少的比较次数就能够将元素找到，因此在C++11中，STL又提供了4个unordered系列的关联式容器，这四个容器与红黑树结构的关联式容器使用方式基本类似，只是其底层结构不同。




unordered_map


unordered_map是存储&lt;key, value&gt;键值]]></description><category></category></item><item><title><![CDATA[AVL树and红黑树]]></title><link>https://blog.youkuaiyun.com/chen_hard/article/details/119831768</link><guid>https://blog.youkuaiyun.com/chen_hard/article/details/119831768</guid><author>chen_hard</author><pubDate>Fri, 20 Aug 2021 22:04:09 +0800</pubDate><description><![CDATA[二叉搜索树有其自身的缺陷，假如往树中插入的元素有序或者接近有序，二叉搜索树就会退化成单支树，时间复杂度会退化成O(N)，因此map、set等关联式容器的底层结构是对二叉树进行了平衡处理，即采用平衡树来实现。




AVL 树


AVL树的概念

	
		二叉搜索树虽可以缩短查找的效率，但如果数据有序或接近有序二叉搜索树将退化为单支树，查找元素相当于在顺序表中搜索元素，效率低下。因此，两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明了一种解决上述问题的方法：.]]></description><category></category></item><item><title><![CDATA[map和set]]></title><link>https://blog.youkuaiyun.com/chen_hard/article/details/119827583</link><guid>https://blog.youkuaiyun.com/chen_hard/article/details/119827583</guid><author>chen_hard</author><pubDate>Fri, 20 Aug 2021 21:16:56 +0800</pubDate><description><![CDATA[关联式容器


在之前的文章中，我们已经接触过STL中的部分容器，比如：vector、list、deque、forward_list(C++11)等，这些容器统称为序列式容器，因为其底层为线性序列的数据结构，里面存储的是元素本身。
那什么是关联式容器？它与序列式容器有什么区别？

关联式容器也是用来存储数据的，与序列式容器不同的是，其里面存储的是&lt;key, value&gt;结构的键值对，在数据检索时比序列式容器效率更高。
在说关联式容器之前，我们要先说说什么是键值对！

键值对

用来表示具有一一.]]></description><category></category></item><item><title><![CDATA[二叉搜索树]]></title><link>https://blog.youkuaiyun.com/chen_hard/article/details/119825561</link><guid>https://blog.youkuaiyun.com/chen_hard/article/details/119825561</guid><author>chen_hard</author><pubDate>Fri, 20 Aug 2021 16:48:46 +0800</pubDate><description><![CDATA[二叉搜索树概念：

二叉搜索树又称二叉排序树，它或者是一棵空树，或者是具有以下性质的二叉树: 

	

	

	

	

	若它的左子树不为空，则左子树上所有节点的值都小于根节点的值 
		若它的右子树不为空，则右子树上所有节点的值都大于根节点的值 
	
它的左右子树也分别为二叉搜索树



二叉搜索树操作：

二叉搜索树的查找
	二叉搜索树的插入
	树为空，则直接插入
		
if (nullptr == root)
{
	root = new Node(data);
	return true...]]></description><category></category></item><item><title><![CDATA[论一论多态]]></title><link>https://blog.youkuaiyun.com/chen_hard/article/details/119810230</link><guid>https://blog.youkuaiyun.com/chen_hard/article/details/119810230</guid><author>chen_hard</author><pubDate>Thu, 19 Aug 2021 21:51:07 +0800</pubDate><description><![CDATA[多态的概念：


通俗来说，就是多种形态，具体点就是去完成某个行为，当不同的对象去完成时会产生出不同 的状态。
	
	举个栗子来说：比如买票这个行为，当普通人买票时，是全价买票；学生买票时，是半价买票；军人买票时是优先买票。 
	

多态的定义：


多态的构成条件

	
		多态是在不同继承关系的类对象，去调用同一函数，产生了不同的行为。比如Student继承了Person。 Person对象买票全价，Student对象买票半价。
		
		必须通过基类的指针或者引用调用虚函数
		被调用的函数必须是虚函]]></description><category></category></item><item><title><![CDATA[C++中的继承（下）]]></title><link>https://blog.youkuaiyun.com/chen_hard/article/details/119807434</link><guid>https://blog.youkuaiyun.com/chen_hard/article/details/119807434</guid><author>chen_hard</author><pubDate>Thu, 19 Aug 2021 20:07:00 +0800</pubDate><description><![CDATA[我们前面说了很多的继承相关的知识，那么基类中又那些成员能继承到子类中呢?

基类包含:

	成员变量:
		普通成员变量
			静态成员变量
		
		成员函数:
		普通成员函数
			静态成员函数
			默认成员函数:
			构造、拷贝构造、赋值运算符重载、析构函数
			
		
	
	可以继承的成员：
	普通成员变量可以继承到子类中
		静态成员变量: 也被子类继承，并且在整个继承体系中只有一份普通成员函数也继承到子类中
		静态成员函数也被子类继承了，并且可以通过 子类::静态成员函数()调用
	.]]></description><category></category></item><item><title><![CDATA[C++中的继承（上）]]></title><link>https://blog.youkuaiyun.com/chen_hard/article/details/119804128</link><guid>https://blog.youkuaiyun.com/chen_hard/article/details/119804128</guid><author>chen_hard</author><pubDate>Thu, 19 Aug 2021 17:17:34 +0800</pubDate><description><![CDATA[继承

继承的概念 

	继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段，它允许程序员在保持原有类特性的基础上进行扩展，增加功能，这样产生新的类，称派生类。继承呈现了面向对象程序设计的层次结构，体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用，继承是类设计层次的复用。
	
...]]></description><category></category></item><item><title><![CDATA[C++的IO流]]></title><link>https://blog.youkuaiyun.com/chen_hard/article/details/119802588</link><guid>https://blog.youkuaiyun.com/chen_hard/article/details/119802588</guid><author>chen_hard</author><pubDate>Thu, 19 Aug 2021 15:26:44 +0800</pubDate><description><![CDATA[C语言的输入与输出：

C语言中我们用到的最频繁的输入输出方式就是scanf()与printf()。 

	scanf(): 从标准输入设备(键盘)读取数据，并将值存放在变量中。
		printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。
	
	注意宽度输出和精度输出控制。C语言借助了相应的缓冲区来进行输入与输出。
那么，流是什么？

“流”即是流动的意思，是物质从一处向另一处流动的过程，是对一种有序连续且具有方向性的数据（ 其单位可以是bit,byte,packet ）的抽象描述。 C++.]]></description><category></category></item><item><title><![CDATA[stack（栈）和queue（队列）]]></title><link>https://blog.youkuaiyun.com/chen_hard/article/details/119788640</link><guid>https://blog.youkuaiyun.com/chen_hard/article/details/119788640</guid><author>chen_hard</author><pubDate>Wed, 18 Aug 2021 22:02:19 +0800</pubDate><description><![CDATA[stack:

stack是一种容器适配器，专门用在具有后进先出操作的上下文环境中，其删除只能从容器的一端进行元素的插入与提取操作。 
	stack是作为容器适配器被实现的，容器适配器即是对特定类封装作为其底层的容器，并提供一组特定的成员函数来访问其元素，将特定类作为其底层的，元素特定容器的尾部(即栈顶)被压入和弹出。 
	stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类，这些容器类应该支持以下操作： 
	empty：判空操作 
		back：获取尾部元素操作 
		push_back]]></description><category></category></item><item><title><![CDATA[list容器]]></title><link>https://blog.youkuaiyun.com/chen_hard/article/details/119761698</link><guid>https://blog.youkuaiyun.com/chen_hard/article/details/119761698</guid><author>chen_hard</author><pubDate>Wed, 18 Aug 2021 15:55:20 +0800</pubDate><description><![CDATA[list的介绍


list是可以在常数范围内在任意位置进行插入和删除的序列式容器，并且该容器可以前后双向迭代。
	list的底层是双向链表结构，双向链表中每个元素存储在互不相关的独立节点中，在节点中通过指针指向其前一个元素和后一个元素。
	list与forward_list非常相似：最主要的不同在于forward_list是单链表，只能朝前迭代，已让其更简单高效。 
	与其他的序列式容器相比(array，vector，deque)，list通常在任意位置进行插入、移除元素的执行效率更好。 
	与其他序列式]]></description><category></category></item><item><title><![CDATA[vector]]></title><link>https://blog.youkuaiyun.com/chen_hard/article/details/119759216</link><guid>https://blog.youkuaiyun.com/chen_hard/article/details/119759216</guid><author>chen_hard</author><pubDate>Tue, 17 Aug 2021 17:19:30 +0800</pubDate><description><![CDATA[vector的介绍


vector是表示可变大小数组的序列容器。 
	就像数组一样，vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问，和数组一样高效。但是又不像数组，它的大小是可以动态改变的，而且它的大小会被容器自动处理。 
	本质讲，vector使用动态分配数组来存储它的元素。当新元素插入时候，这个数组需要被重新分配大小为了增加存储空间。其做法是，分配一个新的数组，然后将全部元素移到这个数组。就时间而言，这是一个相对代价高的任务，因为每当一个新的元素加入到]]></description><category></category></item><item><title><![CDATA[string类]]></title><link>https://blog.youkuaiyun.com/chen_hard/article/details/119755817</link><guid>https://blog.youkuaiyun.com/chen_hard/article/details/119755817</guid><author>chen_hard</author><pubDate>Tue, 17 Aug 2021 16:03:56 +0800</pubDate><description><![CDATA[为什么学习string类？ 

C语言中的字符串 

	C语言中，字符串是以'\0'结尾的一些字符的集合，为了操作方便，C标准库中提供了一些str系列的库函数，但是这些库函数与字符串是分离开的，不太符合OOP的思想，而且层空间需要用户自己管理，稍不留神可能还会越界访问。
	
string类

字符串是表示字符序列的类 
	标准的字符串类提供了对此类对象的支持，其接口类似于标准字符容器的接口，但添加了专门用于操作单字节字符字符串的设计特性。 
	string类是使用char(即作为它的字符类型，使用它的默认c]]></description><category></category></item><item><title><![CDATA[STL简介]]></title><link>https://blog.youkuaiyun.com/chen_hard/article/details/119754529</link><guid>https://blog.youkuaiyun.com/chen_hard/article/details/119754529</guid><author>chen_hard</author><pubDate>Tue, 17 Aug 2021 14:19:43 +0800</pubDate><description><![CDATA[什么是STL？



STL(standard template libaray-标准模板库)：是C++标准库的重要组成部分，不仅是一个可复用的组件库，而且是一个包罗数据结构与算法的软件框架。




STL的六大组件






STL要解决的问题



STL库的更新太慢了。这个得严重吐槽，上一版靠谱是C++98，中间的C++03基本一些修订。C++11出来已经相隔了13年，STL才进一步更新。 
	STL现在都没有支持线程安全。并发环境下需要我们自己加锁。且锁的粒度是比较大的。 
	STL极度的追求效]]></description><category></category></item><item><title><![CDATA[说说函数模板]]></title><link>https://blog.youkuaiyun.com/chen_hard/article/details/119752265</link><guid>https://blog.youkuaiyun.com/chen_hard/article/details/119752265</guid><author>chen_hard</author><pubDate>Tue, 17 Aug 2021 13:21:44 +0800</pubDate><description><![CDATA[如何实现一个通用的交换函数呢？ 

使用函数重载虽然可以实现，但是有一下几个不好的地方： 

	重载的函数仅仅只是类型不同，代码的复用率比较低，只要有新类型出现时，就需要增加对应的函数 
		代码的可维护性比较低，一个出错可能所有的重载均出错 
	
那能否告诉编译器一个模子，让编译器根据不同的类型利用该模子来生成代码呢？



函数模板:




函数模板概念 

	函数模板代表了一个函数家族，该函数模板与类型无关，在使用时被参数化，根据实参类型产生函数的特定类型版本。
	
	函数模板格式
	
templa]]></description><category></category></item><item><title><![CDATA[动态内存管理]]></title><link>https://blog.youkuaiyun.com/chen_hard/article/details/119740530</link><guid>https://blog.youkuaiyun.com/chen_hard/article/details/119740530</guid><author>chen_hard</author><pubDate>Mon, 16 Aug 2021 21:21:38 +0800</pubDate><description><![CDATA[什么是动态内存?

用户自己申请的内容空间并且用完之后需要动态进行释放的空间
	动态: 用户申请由用户释放
为什么需要进行动态内存申请呢?

在内存不同的区域存放不同的是不同的数
	而用户数据能够存储的位置: 栈 堆
	用户的数据可能非常大，在栈区中存储补下，因此需要更大的内存空间类存储用户的数据更大的内存空间用户需要向操作系统来进行获取
	栈空间(函数运行时的栈帧，随函数运行而创建，随函数结束而回收，回收之后，函数中局部变量的数据就没有意义了, 但是有些情况下，我们需要将程序运行期间产生的数据带出函数..]]></description><category></category></item><item><title><![CDATA[类与对象简述]]></title><link>https://blog.youkuaiyun.com/chen_hard/article/details/119735252</link><guid>https://blog.youkuaiyun.com/chen_hard/article/details/119735252</guid><author>chen_hard</author><pubDate>Mon, 16 Aug 2021 17:32:33 +0800</pubDate><description><![CDATA[什么是类？

类是对一个相同群体来进行描述的，描述对象都具有那些属性(成员变量)，描述对象都具有那些功能(成员函数)
	在C++中，定义一个类时，就相当于定义了一个类型，也定义了一个新的作用域
	类相当于是一张图纸，在图纸上涉及房子的样式，(类是不占用空间的，而用类定义出来的对象是"占用空间"的，即: 数据是不能放到类中，只能存储到用类定义出来的对象中)
什么是对象？

对象是实实在在存在的，是类的一种具体的体现，是用类类型定义出来的一个变量，数据最终都是放在对象中的
	对象: 相当于是用图纸建造出来的房子]]></description><category></category></item></channel></rss>