![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
马竞名宿托雷斯
努力吸取营养
展开
-
C++智能指针
大家都知道C/C++中对内存进行动态申请的时候, 堆上开辟的空间一定要进行释放, 否则造成了内存泄漏是一件十分危险的事情, 但是我们在平时写代码的时候, 难免会忘记释放空间, 或者当程序抛出异常的时候, 释放空间的代码被跳过, 执行到, 这都是造成内存泄漏的原因. 为了解决这一情况, C++中引入了智能指针,来对动态开辟的内存进行管理. RAII思想 RAII的思想是指, 利用对象的生命周期来对程...原创 2019-12-01 17:41:21 · 111 阅读 · 0 评论 -
C++实现单例模式
单例模式 单例模式属于创建性的模式, 它提供了一种创建对象的最佳方法,他设计到一个单一的类,也就是说,一个类只能实例化一个对象. 并且还需要给其他对象提供全局访问点. 单例模式的实现方式主要有 饿汉模式 和 懒汉模式 饿汉模式 饿汉模式的意思是, 无论程序将来是否使用这个类, 在程序已启动的时候,就对对象进行实例化 饿汉模式的实现需要在类的内部就对声明一个该类静态成员对象, 并且在类外进行初始化,...原创 2019-11-14 18:20:34 · 162 阅读 · 0 评论 -
C++实现工厂模式
什么是设计模式 设计模式是一套被多数人知晓, 被大家反复使用的一种代码设计经验的总结, 在写代码的时候合理的运用设计模式,可以使自己的代码的可读性变得更高, 也可以增强代码的复用性 单例模式 单例模式属于创建性的模式, 它提供了一种创建对象的最佳方法,他设计到一个单一的类,也就是说,一个类只能实例化一个对象. 并且还需要给其他对象提供全局访问点. 单例模式的实现方式主要有 饿汉模式 和 懒汉模式 ...原创 2019-11-12 22:26:29 · 147 阅读 · 0 评论 -
C++---STL.string
string是我们在STL中的一个很实用的容器, 他的底层就是一个类, 用来存储字符, 并且它具备类的6大成员函数 size(), resize(), reserve(),capacity() size() : size()接口用来获取当前字符串的有效字符长度. capacity() : capacity()接口用来获取当前string对象的容量大小. resize() : 他改变的是size...原创 2019-09-26 20:24:32 · 89 阅读 · 0 评论 -
C++多态
多态是什么 通俗的将多态就是多中形态 , 具体讲就是去完成某个行为时不同的对象去完成是会产生不同的状态, 就像买票这一件事情, 成人去买票就是全票, 学生去买票就是半票, 不同的对象去完成同一件事情, 产生的状态是不同的 在C++中, 就体现在不同的但有继承关系的类的对象, 去调用同一个对象时, 产生了不同的行为 如下代码中同样的接口在不同的对象去调用的时候, 打印的效果是不同的 class pe...原创 2019-09-12 19:59:04 · 118 阅读 · 0 评论 -
C++继承
继承机制实际上是对代码的一种复用 , 他可以在保持原有类特性的基础上进行拓展. 这样,我们把被复用的类称为 基类(父类) , 复用基类生成的新类 , 我们称为 派生类(子类) class person{ public: void print(){ cout<<"_age:"<<_age; cout<<"_name"<<_name; ...原创 2019-09-03 11:30:52 · 145 阅读 · 0 评论 -
C++模板
1.泛型编程 泛型编程指的是编写与类型无关的代码,让系统或者编译器自己根据不同的类型去生成相应的代码. 我们把这一类编程叫做泛型编程. 对于实现一个交换函数我们都是通过类似于如下的代码去实现的. 但是下面的代码只能实现 int 类型的变量的交换. 对于 double型的变量来说, 就只能重新去写一个交换函数. int Swap(int & a,int & b){ int tem=*...原创 2019-03-24 19:09:26 · 133 阅读 · 0 评论 -
Date日期类
对日期类实现的大致流程 在私有成员中定义 int 整形的年(_year),月(_month),日(_day). 在公有成员中实现 a.构造函数 Date(int year=1990,int month=1,int day=1); b.拷贝构造函数 Date(const Date& d); c.赋值运算符的重载 Date& operator=(c...原创 2019-03-24 21:08:21 · 193 阅读 · 0 评论 -
C++List的模拟实现
list的基本结构 list在库中是一个实现删除插入的一个容器, 其中底层的结构是一个双向的循环链表. 链表中的每一个元素都存储在每一个互不相干的独立结点之中. 每一结点中保存了该结点的前一个元素和后一个元素的地址. 对其进行删除插入的操作的时候, 时间复杂度都是O(1); list不同的地方就在于其迭代器的实现, 由于List中所存储的都是每一个结点的地址,因此对迭代器进行解引用以及++/–操作...原创 2019-04-22 18:09:56 · 121 阅读 · 0 评论 -
二叉搜索树
二叉搜索书是一个有排序的树,特点就在于将二叉搜索书按照中序进行遍历的时候的得到的是一个有小到大的有序数列 在创建二叉搜索树的时候,当数据大于当前节点的数据值时就向右子树中插入,当小于当前结点的数据值时,就向左子树插入. 如上图将其按照中序遍历的结果刚好为: 0,1,2,3,4,5,6,7,8,9 注意:二叉搜索树中没有相同的值 二叉搜索树的定义以及节点定义 template<class T&...原创 2019-08-07 17:56:51 · 104 阅读 · 0 评论 -
AVL树
AVL树是在二叉搜索树的基础上的一种优化, 在操作二叉搜索树的时候无论是插入节点还是删除节点,都需要去遍历寻找位置,因此操作二叉搜索树的时间复杂度为O(log N),但是当我们的二叉搜索树为单边树的时候, 进行一次操作的时间复杂度就变成了O(N),这两者之间的差距还是非常大的. AVL树是二叉搜索树的基础之上多了一个平衡因子, 每个节点的平衡因子就是其对应的结点的右子树的高度与左子树的高度之差, ...原创 2019-08-16 15:32:29 · 79 阅读 · 0 评论 -
红黑树
红黑树也是在二叉搜索树的基础是上对其性能的一个拓展, 虽然AVL树的性能已经很高了,但是它在调整的时候由于平衡因子出现的多种情况导致的旋转是非常多的,因此在实现的时候也就会变得相当的复杂. 而红黑树虽然也涉及到了旋转,但他相对于AVL树是稍微简单的,AVL树和红黑树的时间复杂度都为O(long N),假设有是一个数据插入到AVL树中,他操作的次数大约为30次,红黑树操作的次数大约为60次,但对与计...原创 2019-08-19 17:27:00 · 89 阅读 · 0 评论 -
哈希表(闭散列)
在红黑树中,我们对其中的元素进行操作的时候,每一个键值要通过层层的比较才能定位到它的准确位置,虽然他的时间复杂度已经为O(log N)了,但是它还不是最理想的情况, 最理想的情况是,当我们没拿到一个键值的时候,就能直接找到它所映射的那个位置, 这样就能将时间复杂度直接降到 O(1),我们这中映射关系叫做哈希函数, 将存储数据的表叫做哈希表. 哈希函数与哈希表(闭散列) 其实STL中的vector就...原创 2019-08-25 17:39:46 · 287 阅读 · 0 评论 -
哈希表(开散列)
哈希表的结构有闭散列和开散列,闭散列的问题就在于, 产生哈希冲突太多的时候,就会是哈希表的性能下降. 而开散列的优点在在于. 它在哈希表的每一行键值位置下面挂了一个链表, 哈希表中存放链表头结点的指针, 所以这里的 vector 是一个指针数组, 当产生哈希冲突的时候, 只需要在相同键值的链表下面在挂一个节点就可.这样的到的就像一个个桶一样, 因此也叫哈希桶 哈希桶与结点 template<...原创 2019-08-28 16:46:20 · 164 阅读 · 0 评论 -
unordered_map与unordered_set的实现
unordered_map与unordered_set unordered_map与unordered_set大体上与map和set的特性是相同的, 但是unordered系列的关联式容器是无顺序的, 这是因为他的底层结构为哈希表,而且由于哈希表的性能略高于红黑树, 因此unordered关联式容器的性能也略高 除此之外, map 与 set 的迭代器因为红黑树每个节点是三叉的,所以它提供双向的迭...原创 2019-08-29 17:25:19 · 459 阅读 · 0 评论