![](https://img-blog.csdnimg.cn/0f9b451f325a49cd856af4cc05183331.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++
文章平均质量分 97
详解C++的知识。全程无废话,干货满满,欢迎订阅哦
阿qiu不熬夜
积极更新,欢迎关注我哦
目前在更:C++与Linux
有关数据结构初阶与C语言入门与进阶的内容都可以在专栏找到哦
展开
-
红黑树介绍与模拟实现(insert+颜色调整精美图示超详解哦)
红黑树是平衡二叉树的一种,他在满足二叉搜索树特性的基础上,给每个结点增加了一个颜色属性,包括Red与Black;并要求从根节点到一个叶子结点形成的任意一条路径中,通过对结点颜色的限制规则,没有任何一条路径回比其他的路径长一倍原创 2024-04-04 19:04:07 · 1698 阅读 · 18 评论 -
AVL树的介绍与模拟实现(insert+旋转调平精美图示超详解哦)
AVL树在满足二叉搜索树条件的基础上,给每个结点中增加了一个平衡因子(这个平衡因子的值是该结点左右子树的高度差)。AVL树要求平衡因子的绝对值小于等于1,即任意一个结点左右子树的高度差不超过1。通过降低树的高度,从而达到减少平均搜索时间的效果(在这里做例子的平衡二叉树是按照大小次序依次插入的结果)原创 2024-02-02 04:12:54 · 1104 阅读 · 13 评论 -
反向迭代器的介绍与实现(超详解哦)
迭代器(iterator)提供一种通用的方法,使其能够依序访问某个容器所含的各个元素,而又无需暴露该容器的内部表达方式。有利于算法于容器的泛化。反向迭代器的访问方向与迭代器相反:反向迭代器的`++`操作使其向前前进一个元素。反向迭代器本质上其实是对普通迭代器的封装**:反向迭代器的`++`就是底层迭代器的`--`。原创 2024-01-24 02:24:13 · 1026 阅读 · 5 评论 -
binary_search_tree的介绍与实现(二叉搜索树精美图示详解哦)
之前我们了解到的效率很高的搜索算法就是二分查找算法,在二分查找算法下,搜索的时间复杂度可以达到 O(logN)。但是二分查找有一个很大的限制条件,即它必须要求数据有序。但是对于二叉搜索树而言,在建立二叉搜索树结构后,就可以实现查找效率为O(logN)。二叉搜索树即在二叉树的基础上满足:对于任何一个根结点,若左子树不为空,它的左子树的值全部小于根节点若右子树不为空,右子树的值全部大于根节点。这也就意味着,如果我们中序遍历一个二叉搜索树,得到的一定是一个递增序列。原创 2024-01-22 04:50:23 · 1070 阅读 · 9 评论 -
priority_queue的使用与模拟实现(容器适配器+stack与queue的模拟实现源码)
优先级队列与队列类似,我们不能随意访问其中的元素,只能访问队头的首元素。但是在优先级队列中,根据某种优先级(某个标准),任意时刻队列的首元素都会是整个队列中优先级最高的元素(默认情况下队头的元素为最大的元素,可以通过迪三个模板参数来调整)原创 2024-01-20 02:43:23 · 1036 阅读 · 8 评论 -
C++多态(+多态原理超详解哦)
这种同样的事件对不同种类的对象会产生不同的状态的不同对象执行多种状态的行为,就是多态。在上一篇中详细介绍了继承的行为, 继承中的父类与子类就是天然的两种不同对象,并且有着密切的联系。所以多态就天然的在继承下实现。原创 2024-01-10 07:36:36 · 1162 阅读 · 6 评论 -
C++继承(+继承原理超详解哦)
继承是面向对象编程中一种代码复用的重要手段。继承是在保持原有类(基类或父类)特性的基础上进行拓展,增加属性或方法,从而产生一个新的类(派生类或子类)。继承体现了面向对象编程的层次型结构,是由简单到复杂的过程原创 2023-12-17 07:14:16 · 2232 阅读 · 13 评论 -
list【2】模拟实现(含迭代器实现超详解哦)
我们模拟实现的 list 底层是一个带头双向循环链表在实现list时,我们首先需要一个结构体以表示链表中结点的结构`list_node`,大致包括数据与指向前后结点的指针:原创 2023-09-03 21:18:16 · 2197 阅读 · 30 评论 -
list【1】介绍与使用(超详解哦)
list适用于需要经常在任意位置插入删除大量数据,且不需要经常访问任意位置元素的数据的存储list是一个类模板,可以支持存储任意类型原创 2023-08-28 21:35:23 · 1025 阅读 · 21 评论 -
vector【2】模拟实现(超详解哦)
vector中是通过三个迭代器 _start、_finish、_endOfStorage分别指向数据块的起始位置、有效数据末尾的下一个位置、存储容量末尾的下一个位置来管理数据的。vector中迭代器就是原生指针,本质上就是使用三个指针来管理动态申请的存储数据的空间。原创 2023-08-16 16:39:31 · 875 阅读 · 22 评论 -
vector【1】介绍与使用(超详解哦)
vector是可变大小数组序列容器。vector的底层是一块动态申请连续的空间,与数组类似,vector可以通过下标高效的访问数组中的元素;同时由于是动态申请的空间,可以根据需求扩容,弥补了数组大小固定的缺陷。原创 2023-08-12 23:14:07 · 721 阅读 · 15 评论 -
string【2】模拟实现(超详解哦)
在本篇文章中就要来模拟实现一下string类,以帮助我们更好的理解与使用string在我们模拟实现的string中,要具备库中string所具有的主要接口,例如:默认成员函数、迭代器、容量、元素访问、运算符重载、非成员函数。其中只实现这些函数的常用重载形式。原创 2023-07-31 01:37:40 · 575 阅读 · 20 评论 -
string【1】介绍与使用(超详解哦)
在C语言部分,我们对于字符串的操作经常借助C标准库提供的一系列操作字符串的库函数(`strlen等`)来实现的。但是,这样去操作字符串,函数与其操作的字符串是分离的,不符合面向对象的思想,使用时较为麻烦;而且需要自己管理底层的空间,容易导致越界访问的问题。在C++标准库中提供了管理字符串的string类,封装了方法与元素使操作字符串时更加方便原创 2023-07-15 23:24:01 · 980 阅读 · 19 评论 -
模板初识与STL简介
泛型编程就可以通过只写一份对所有类型通用的代码,在需要使用的时候由编译器生成相应的代码,是代码复用的一种手段。模板是泛型编程的基础原创 2023-07-01 23:08:16 · 388 阅读 · 16 评论 -
C/C++内存管理(new&delete详解)
对于内置类型,使用malloc与free还可以勉强达到我们的需求,但是对于自定义类型,比如类类型,我们在申请空间的时候,还需要初始化类对象,malloc显然不能满足我们的需求。而new在动态申请空间之后,还会调用默认构造函数;delete在调用析构函数之后才会释放动态申请的空间。原创 2023-06-19 00:31:32 · 603 阅读 · 4 评论 -
类和对象【5】日期类的实现
在了解了类和对象的基础知识后,我们就可以简单实现一个日期类(前期的知识介绍链接如上,一些基础知识本文就不过多赘述)原创 2023-06-09 19:54:14 · 876 阅读 · 16 评论 -
类和对象【4】static成员、const对象、友元
static成员只是在类中声明,在类外定义,定义时不添加static关键字,不占用该类型对象的空间。static成员函数与一般成员函数不同,它没有隐含的this指针的传参,因此不能访问私有的成员变量。但是它可以正常访问static成员变量;C++提供了用const修饰this指针的方法,即在参数列表后加上const;可以使用friend关键字使一个在外部声明的函数作为类的友元函数。原创 2023-06-03 21:27:03 · 663 阅读 · 12 评论 -
类和对象【3】初始化列表
在构造函数体中对成员变量的初始化其实是属于对它们进行赋值操作而不是定义。那么对于一些只能在定义时给值的变量,它们在定义之后就不能改变(例如const变量与引用变量)或者一些没有默认构造函数的类类型成员变量,构造函数中无法对它们进行定义。用构造函数显然就不能满足我们的需求。那么在类对象实例化时,这些成员变量是在哪里定义的呢?定义时又是怎么对他们进行初始化的呢?原创 2023-05-25 23:10:58 · 917 阅读 · 4 评论 -
类和对象【2】默认成员函数
对于内置类型,有操作符可以实现初始化、赋值、等操作。但是对于自定义类型,要实现初始化、赋值、销毁等操作就需要我们通过函数去实现了。但是每个类都实现并且使用时显式调用这些基础普遍的函数是很麻烦的,所以在一个类类型被创建时,会自动生成6个默认成员函数:**构造函数、析构函数、拷贝构造、赋值重载、取地址与const取地址**,并且在需要用到这些功能的地方自动调用。本篇文章重点介绍前四个默认成员函数:原创 2023-05-18 23:52:45 · 771 阅读 · 10 评论 -
类和对象【1】初识
class为定义类的关键字,ClassName为类的名字,{}中为类的主体。类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数。用类将对象的属性与方法结合到一起就是封装,并且通过访问限定隐藏属性以及方法的细节,只向用户提供接口,使用户更方便的使用类:原创 2023-05-14 17:17:40 · 318 阅读 · 14 评论 -
C++入门(命名空间、缺省参数、函数重载、引用、内联函数)
C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。在前面对C语言的学习中,相信大家对用C语言编程已经很了解了,所以就不赘述基础的语法了。在本篇文章中将介绍一些新知识,可以让你初步上手C++!原创 2023-05-07 18:22:53 · 407 阅读 · 5 评论