
C++
文章平均质量分 73
凉夏y
这个作者很懒,什么都没留下…
展开
-
红黑树与map、set的封装
简单了解红黑树上一篇博客我们了解了AVL树的插入实现,其插入搜索时间复杂度是O(logN)级别的。而红黑树也是一颗平衡搜索二叉树,但是与AVL树不同的地方在于,红黑树的平衡策略是近似平衡,而非AVL树的完全平衡。可能有小伙伴就会问了,不是越平衡效率越高吗?为什么更多地方采用的是红黑树而非AVL树呢?这里就要从红黑树近似平衡的特点说起了,由于平衡限制的并不那么严格,所以红黑树通过旋转调整平衡的次数相比AVL树就更少了,也就是说红黑树的插入会比AVL更快。而红黑树通过一系列规则,将根节点到叶子结点的最长原创 2022-06-03 19:28:27 · 323 阅读 · 2 评论 -
AVL树的插入
为什么需要AVL树?我们知道搜索二叉树通过对每一个结点限制规定:左子树都比比根节点小,右子树比根节点大,来达到O(logN)的搜索效率的:但是一般的搜索二叉树还有一个很严重的问题:当左右子树高度差很大时,会导致搜索效率极度退化,甚至在顺序插入时退化至O(N):很明显,普通的搜索二叉树在一些情况下并不能达到预期的O(logN)搜索效率,而其原因就是高度的极度不平衡。而AVL树就通过旋转的方式来维持搜索二叉树的平衡,AVL树得名于它的发明者G. M. Adelson-Vels原创 2022-05-29 12:58:45 · 2608 阅读 · 1 评论 -
vector迭代器失效分析
我们在使用迭代器时,常常会遇到迭代器失效的情况。一旦迭代器失效,就可能出现各种意想不到的错误,下面,我们就来分析迭代器失效的原因,以及迭代器失效的解决办法。原创 2022-03-14 22:51:07 · 2308 阅读 · 1 评论 -
string类的深浅拷贝
1.浅拷贝在学习string的时候,我们会遇到需要对string类进行拷贝的情况。通常,我们进行数据拷贝只需要将一个类里的基本数据进行值拷贝即可。但是实际上,直接进行值拷贝对于string类来说是不合理的。class string{ //... string& operator=(const string& s)//看似正确的拷贝方式 { _str = s._str; _size = s._size; _capacity = s._capacity; ret原创 2022-03-05 11:24:57 · 3468 阅读 · 0 评论 -
C++之模板入门
1.函数模板在C语言中实现一个加法的函数并不困难。int add(int x, int y){ return x + y;}但是很明显,这个函数限定了两个相加的数都是整数,并且其返回值也为整数。但是,如果我们想得到两个双精度浮点数相加的结果呢?那么add函数可能就要写成:int addint(int x, int y){ return x + y;}double adddouble(double x, double y){ return x + y;}那么,如果我原创 2022-02-22 17:49:11 · 784 阅读 · 0 评论 -
构造函数中的初始化列表
对于日期类,我们可以使用如下构造函数 Date(int year = 1900, int month = 1, int day = 1) {//这里的构造函数没有判断日期合法性,仅用来举例 _year = year; _month = month; _day = day; }显然这是没有问题的。但我们要知道,在构造函数的函数体内进行的是成员变量的赋值,而成员变量的初始化则是在初始化列表中进行的。初始化的格式:以 冒号开始,每一行是一个成员变量,后面跟着括号,括号里面放初始值,每原创 2022-01-23 14:37:03 · 666 阅读 · 0 评论 -
类和对象之日期类的实现
通过类和对象的了解我们可以知道,类是一种自定义类型。今天我们就要创建一个可以保存某一天的年、月、日三个信息的类。此外,这个类还可以完成一些相对基础的操作,例如计算两个日期之间相差多少天、比较两个日期的大小等。一个类最基础的就是六个默认成员函数,他们分别是构造函数,析构函数,拷贝构造,赋值重载,以及两个不常用的取地址及const对象取地址。由于后两个不常用,下面的实现中不会进行说明。1.构造函数与析构函数一个类最基础的功能就是初始化与清理,所以我们先讲讲这两个函数的实现。首先是构造函数,构造函原创 2022-01-18 01:24:37 · 679 阅读 · 0 评论 -
初识类和对象
1.什么是类和对象?在C语言中,并没有类和对象这个概念。而在C++中,引入了这个概念。提到类和对象,我们先要了解什么是面向过程和面向对象。在一个外卖系统中,面向过程的设计思路是将送餐、下单、接单等操作直接罗列出来并单独进行设计。而对于面向对象,我们可以设计出用户、商家、配送员这三个类。而用户下单、商家接单、配送员送餐则是不同类之间的交互操作。在C语言中实现栈,我们会通过一个结构体储存一个栈的所有数据:指向栈空间的指针、栈顶元素、栈的大小等数据。而操作栈的函数则与数据分离,保存在栈结构体之外。原创 2022-01-15 20:30:51 · 1184 阅读 · 0 评论 -
C++中引用的概念以及使用
1.引用的概念通俗的说,在C++中,引用的作用是给变量起外号。下面我们举个例子来说明:int a = 10;int& b = a;//引用的声明方式:类型标识符 &引用名=引用对象在上面的语句中,a是一个整形变量,而b是a的引用。cout << a << endl;cout << b << endl;//输出结果为://10//10输出a和b的值,我们会发现,b所存的值与a所存的值相同。当我们对b所存的值进原创 2021-12-05 17:02:28 · 1061 阅读 · 0 评论 -
快速排序详解
1.什么是快速排序我们知道排序有很多种,常见的如希尔排序,插入排序,选择排序,堆排序等等,而快速排序也是排序家族中的一员。因为其在大多数情况下有着优秀的综合性能,快速排序的快速也算是实至名归,接下来就为大家讲解快速排序的思想与实现。2.快速排序的核心思想快速排序通过多次比较与交换来完成排序。而这个过程又被分为了多次重复单趟排序,接下来我们先从每一趟的排序讲起。快速排序的单趟排序思想是:在一个无序数组中取一个数key,每一趟排序的最终目的是:让key的左边的所有数小于key,key的右边都原创 2021-11-19 16:57:43 · 112953 阅读 · 20 评论