自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 【关联式容器、键值对、map、set、二叉搜索树、AVL树】

一、关联式容器1、什么是关联式容器?关联式容器也是用来存储数据的,与序列式容器(vector、list【底层是线性序列的数据结构】)不同的是,其存储的是<key,value>类型的键值对,数据检索时比序列式容器更加高效;2、什么时键值对?用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value代表与key对应的信息;STL一共实现了两种不同结构的管理式容器:树形结构和哈希结构;二、树形结构关联式容器以下四种容器的共同特点是

2020-08-27 20:42:41 489

原创 【c++类型转换(c语言强制类型转换、c++强制类型转换、)】

一、c语言强制类型转换1、小范围类型转大范围类型的隐式类型转换2、大范围类型转小范围类型的显式类型转换缺陷:转换可视性比较差;二、c++强制类型转换四种强制类型转换的操作符:1、static_cast用于非多态(静态)类型的转换,比如数字类型之间的转换,但不可用于两个毫无关系的类型相互转换;2、reinterpret_cast用于将一种类型转换为另一种类型,比如:将指针转化为一个值放在一个变量里;3、const_cast添加或者删除变量的const属性;4、dynamic_ca

2020-08-26 19:00:57 338

原创 【c++智能指针及RAII机制的理解】

一、为什么要有智能指针?因为在平时编程过程中,极大可能会出现两种情况;(1)malloc出来的空间,没有进行释放,存在内存泄漏;(2)如果在malloc和free之间抛异常,那么同样存在内存泄漏问题。该问题称为异常安全问题。二、智能指针原理及使用1、智能指针的实现是基于RAII(资源获取即初始化)。即对象在构造时获取资源,且在对象的声明周期内资源始终有效,最后在对象析构的时候释放资源。即将一份资源管理的责任交给了一个对象。2、使用RAII思想设计智能指针类...

2020-08-26 17:27:21 987

原创 【c++ 异常】

一、c语言处理异常方式1、终止程序(如assert断言)2、返回错误代码(errno中存放的错误代码被返回)二、c++异常1、c++异常的概念 当一个函数发现自己无法处理的错误时就可以抛出异常,让函数的直接或者间接调用者去处理这个错误。2、关于异常的一些关键字 (1)throw:通过throw关键字来抛出异常(2)catch:在想要处理问题的地方,通过异常关键字catch来捕获这个异常(可有多个catch)(3)try:try块中为防止可能抛出异常的代码,其后常常紧跟一个或多个catch

2020-08-26 09:36:12 168

原创 【c++多态(虚函数、抽象类、虚表、静/动态绑定)】

一、什么是多态?1、多态基本概念多态就是去完成某个行为,不同的对象会产生出不同的状态。例子:普通人去服装店买衣服是按标准价给钱的,而店内员工在该店买东西,是按照员工价付款的。2、多态的定义(1)在继承中构成多态的两个条件:-必须通过基类指针或引用调用虚函数-被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。class Ordinary{ public: virtue void BuyCloth() { cout<<"全价购买" }};cla

2020-08-25 16:33:03 252

原创 【动态内存管理、文件操作、程序环境和预处理】

一、动态内存管理1、为什么存在动态内存管理?因为常规的内存分配只能分配固定大小的空间,比如数组和变量的定义,只会分配固定大小的空间。而有时候需要的空间在运行时才能确定。2、常见动态内存函数(1)malloc和freemalloc: void* malloc(size_t size);成功返回指向开辟好空间的指针,否则返回NULL指针。(返回的指针需要进行强转为所需类型)free: void free(void* ptr);释放动态内存(2)callocvoid * calloc(si

2020-08-25 16:01:55 176

原创 【整型和浮点型在内存中的存储、大小端、指针传参、strlen和sizeof区别、结构体对齐】

一、数据存储整型和浮点型在内存中是如何存储的?(1)整形整形在内存中是以补码的形式存储的,因为以补码形式存储保证了0的唯一性、使加减运算可以统一处理(因为cpu只有加法器,补码形式存储可以将减法用加法代替,提高运算效率)(2)浮点型浮点型在内存中的存储遵循IEEE-754格式标准,由符号位、指数和有效数字三个部分组成。对于32位的浮点数最高位为符号位、接着8位指数位、剩下的是32位有效数字;而对于64位的浮点数,同样最高位是符号位,接着是11位指数位,最后是52位有效数字位。不过对于

2020-08-25 11:18:39 503

原创 【继承练习(实现不被继承的类等)】

1、实现一个不能被继承的类将构造函数私有化或者利用c++11新关键字fininal禁止继承class NonInherit{public://这样派生类没有办法调用基类的构造函数,因此无法继承static NonInherit GetInstance(){return NonInherit();}private:NonInherit()//构造函数私有{}};// C++11给出了新的关键字final禁止继承class NonInherit final{};2、继承和

2020-08-16 16:27:39 160

原创 【c++继承、菱形继承、基类派生类对象转换、虚继承等】

一、继承的概念和定义1、继承的概念继承是实现代码可复用性的重要方法,在保留原类的特征基础上做一些扩展,形成新的类,叫做派生类。一个例子:父亲有一套房子,儿子长大了,父子两人共同拥有这套房。但是经过儿子的奋斗,自己又买了一套房,此时儿子可以说是拥有两套房,一套与父亲共享,一套完全属于自己。就像派生类一样,既有父类的东西,又有自己的东西。2、继承的定义(1)定义格式class Student : public Person{ public: int _stuid;

2020-08-16 14:08:17 351

原创 【c++的IO流、文件流对象】

1、c语言的输入输出c语言常用scanf():从标准输入读取数据,并将其存放至变量、printf():将指定文字/字符串输出到标准输出设备,设定输出宽度和精度;输入输出缓冲区:(1)屏蔽低级IO实现(2)可实现行读取2、c++的IO流(1)流,是是对一种有序连续且具有方向性的数据( 其单位可以bit,byte,packet )的抽象描述。为了实现这种流,c++定义了I/O标准库。(2)c++实现的庞大类库是以ios为基类,其他类是直接或间接派生自ios类的。(3)cerr、clo

2020-08-15 17:43:15 948

原创 【priority_queue、stack、queue模拟实现】

1、priority_queue模拟实现(1)priority_queue.h#pragma once#include<vector>namespace pz{ template<class T,class Container = vector<T>,class Compare = less<T>> class priority_queue { public: void AdjustUp(int child)//向上调整,大堆

2020-08-15 10:43:04 162

原创 【Stl配接器-stack和queue】

一、stack的介绍1、什么是stack(栈)?(1)stack是一种容器适配器,用在先进后出情境下,只能在容器的一端进行插入和删除操作。(2)二、queue的介绍三、priority_queue的介绍四、容器适配器...

2020-08-14 19:43:39 181

原创 【Stl-deque】

1、deque简介:(1)deque是双端队列,双端队列是动态大小的序列式容器,可以向两端进行伸缩。(2)deque通常是一种动态数组,允许随机访问。(3)deque在头尾进行插入和删除操作与vector类似,效率较高,但deque并不保证所有元素存储在连续空间中,以指针加偏移进行访问有可能会非法。(4)deque的内部实现比vector更加复杂,同时也使deque在某些特定情况下增长更加高效,尤其是序列比较大,重新分配成本比较高的情况下。2、deque基本使用(1)构造(1)无参构造

2020-08-12 08:11:00 123

原创 【list的模拟实现】

1、list的迭代器底层实现用一个类型去封装结点的指针,构成一个自定义类型,然后重载*和++等运算符,使其可以像指针一样进行使用。2、模拟实现list刚开始实现的初步工作就是实现一个双向循环链表,并且指向自己。...

2020-08-10 21:26:02 179

原创 【STL-list】

一、list简介1、为什么会有list?作为补充vector缺点而存在。vector是顺序表,list是链表。list和vector的区别实际上就是顺序表和链表的区别。vectro缺点:(1)头部和中部的插入删除效率低,o(N),需要挪动数据。(2)插入数据空间不够需要增容,增容需要开新空间、拷贝数据再释放旧空间,会付出很大的代价。vector的优点:(1)支持下标随机访问,间接支持排序、二分查找,堆算法等等。2、list优缺点:优点:(1)list头部、中间插入不再需要挪动数据,

2020-08-08 17:07:27 233

原创 【vector的模拟实现】

1、构造函数//无参构造vector() :_start(nullptr), _finish(nullptr), _endofstorage(nullptr) {}//拷贝构造1 vector(const vector<T>&v) { _start = new T[v.capacity()]; _finish = _start + v.size(); _endofstorage = _start + v.capacity();

2020-08-06 10:11:40 185

原创 【STL-vector】

一、vector简介1、 vector是表示可变大小数组的序列容器2、vector和数组一样采用连续空间存储数据,可用下标对其进行访问,效率很高。不同的是其大小可以动态改变是由容器自动处理的。3、vector插入一个数据,需要重新分配一个数组,并将所有元素移到这个数组。4、与其他容器相比,vector访问元素、末尾添加和删除元素效率更高效,不在末尾的添加和删除元素操作效率更低。二、vector的常用接口1、构造函数(1)vector():无参构造(2)vector(size_type

2020-08-06 09:44:24 256

原创 【字符串相加、相乘等】

1、反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。class Solution {public: void reverseString(vector<char>& s) { int i = 0 , j = s.size()-

2020-08-03 16:45:54 388

原创 【STL-string】

一、STL简介1、什么是STL?STL是是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包括数据结构与算法的软件框架。2、STL的六大组件仿函数、算法、迭代器、空间配置器、容器、配接器。3、STL的缺陷(1)STL库更新太慢(2)STL没有支持线程安全,并发环境下需要自己加锁(3)追求效率导致内部结构复杂(类型萃取等)(4)STL会导致代码膨胀(本质是模板语法导致的)二、String类1、string类简介(1)string类是表示字符串序列的类(2)其接口

2020-08-03 15:18:33 143

原创 【string的模拟实现】

1、简单string类实现(深拷贝)namespace pz{ class string { public: //构造函数,无参和带参的 string() :_str(nullptr) {} string(char* str) :_str(new char[strlen(str) + 1])//在堆上多申请一个空间存\0 { strcpy(_str, str);//再将数据拷贝到代码段 } string(const string&s)//深拷

2020-08-03 11:05:46 159

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除