- 博客(31)
- 收藏
- 关注
原创 【C++笔记】红黑树
各位读者朋友们大家好!上期我们讲了二叉搜索树之一——AVL树,这一期我们继续讲解另一种二叉搜索树——红黑树。红黑树是⼀棵二叉搜索树,他的每个节点增加一个存储位来表示节点的颜色,可以是红色或者黑色。通过对任何一条从根到叶子的路径上各个结点的颜色进行约束,红黑树确保没有一条路径会比其他路径长出2倍,因而是接近平衡的。综合红黑树的规则来看,理论上全黑最短路径和一黑一红节点的最长路径并不是在每棵红黑树都存在的。假设任意一条从根到NULL节点的路径长度为x,那么bh(black height) <= h <= 2
2025-01-17 12:18:07
1033
原创 【C++笔记】map和set的使用
set的文档set的声明如下,T就是set的底层关键字的类型set默认要求T支持小于比较,如果不支持或者想按自己的需求实现可以自己实现仿函数传给第二个模板参数。set的底层存储数据是从空间配置器申请的,如果需要可以自己实现内存池,传给第三个参数。一般情况下我们不需要传第二个和第三个模板参数。set的底层是用红黑树实现,增删查的时间复杂度是O(logN),迭代器遍历走的是二叉搜索树的中序,所以是有序的。map的参考文档。
2024-12-09 16:33:42
977
原创 【C++笔记】继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要i的手段,它允许我们在保持原有类特性的基础上进行扩展,增加方法(成员函数)和属性(成员变量),这样产生新的类,称为派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的函数层次的复用,继承是类设计层次的复用。
2024-11-29 14:53:01
811
原创 【C++笔记】模板进阶
【优点】模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生增强了代码的灵活性【缺陷】模板会导致代码膨胀问题,也会导致编译时间变长出现模板编译错误时,错误信息非常凌乱,不易定位错误这期就讲完了模板的进阶内容,希望对大家有所帮助,欢迎大家批评指正!
2024-11-25 11:17:00
893
原创 【C++笔记】stack、queue以及仿函数
stack的文档queue的文档优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。优先队列类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。
2024-11-23 17:30:54
885
原创 【C++笔记】vector使用详解及模拟实现
vector的文档使用STL的三个境界:能用、明理、能扩展,下面学习vector,我们也按照这个境界去学习。vector是可以改变大小的数组序列容器,也就是数据结构的顺序表。构造函数声明接口说明vector()重点无参构造构造并初始化n个val重点拷贝构造使用迭代器进行初始化构造无参构造构造并初始化n个val迭代器区间构造。
2024-11-15 17:04:54
959
原创 【C++笔记】string类的模拟实现
各位读者朋友们大家好!上期我们讲解了string类的基础用法,这期我们来模拟实现一下string类。一. string类的构造函数1. 1 无参构造通过初始化列表,将_str初始化为空指针, _size和 _capacity初始化为0。但是这样写是有bug的,在我们访问string的时候会对空指针解引用,正确的是2.2 带参构造如果我们通过初始化列表对string初始化,我们需要先对_str初始化,但是开空间又需要用到_size,就很麻烦,而且这些成员变量不是必须在初始化列表初始化的(引用
2024-11-06 12:03:17
1071
原创 【C++笔记】string类使用详解
各位读者朋友们大家好!上期我们讲完了C++的模板初阶,这一期我们开启STL的学习。STL是C++的数据结构和算法库,是我们学习C++的很重要的一部分内容,在以后的工作中也很重要。现在我们开始讲解。C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但这些库函数与字符串是分开的,不太符合OOP(面向对象编程,Object-Oriented Programming是一种广泛使用的编程范式,它基于“对象”的概念来设计和实现软件。)的思想,而且底层空间需要用户自
2024-11-02 15:11:00
916
原创 【C++笔记】模板初阶
声明和定义分离要重新定义模板参数,而且定义和声明不能放到两个文件中。希望通过这些内容,能够为大家在学习和使用模板的过程中提供有价值的启示和帮助。模板作为C++中强大的特性之一,其初阶知识的掌握对于后续深入学习和应用至关重要。非常期待大家能够从中受益,并在实际编程中灵活运用。同时,也诚挚地欢迎大家提出宝贵的批评和建议,您的反馈将是我不断进步的动力。
2024-10-26 23:21:36
760
原创 【C++笔记】内存管理
int val;这样就写好了一个链表。在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc和free不会调用。new的原理1. 调用operator new函数申请空间2. 在申请的空间上执行构造函数,完成对对象的构造delete的原理1. 在空间上执行析构函数,完成对象中的资源清理工作2. 调用operator delete函数释放对象的空间new T[N]的原理。
2024-10-26 12:10:42
929
原创 【C++笔记】类和对象(下)
各位读者朋友大家好,上期我们讲了类和对象中篇的内容,这期我们开启类和对象部分的收尾,这部分的难度不低,希望我们能打败他!1. 之前我们在讲构造函数的时候,初始化成员变量主要使用函数体内赋值,构造函数初始化还有一种方式,就是初始化列表,初始化列表的使用方式是以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个成员变量后面跟一个放在括号里的初始值或表达式。当然我们也可以在花括号内继续使用赋值。2. 每个成员变量在初始化列表中只能出现一次,语法上理解初始化列表可以认为是每个成员变量定义初始化的地方。
2024-10-24 22:17:22
1013
原创 【C++笔记】类和对象(中)
各位读者朋友们大家好,上期我们讲完了C++的类和对象上的内容,这期我们开启类和对象中篇的讲解。默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。一个类,我们不写的情况下编译器会默认生成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个,最后两个取地址重载不重要,我们稍微了解一下即可。其次就是C++11以后还会增加两个默认成员函数,移动构造和移动赋值,这个我们后面再讲解。默认成员函数很重要,也比较复杂,我们要从两个方面去学习:构造函数是特殊的成员函数,需要注意的是,构
2024-10-20 22:14:46
938
原创 【C++笔记】类和对象(上)
class是定义类的关键字,Stack是类的名字,{}内是类的主体,要注意类定义结束时花括号后面分号不能省略。类主体中的内容称为类的成员:类中的变量称为类的属性或成员变量(这里的成员变量只是声明,没有开空间类中的函数称为类的方法或成员函数。为了区别成员变量,一般习惯上成员变量会加上一个特殊的标识,如成员变量的前面或后面加_或者以m开头,但C++中这个并不是强制的,只是惯例。
2024-10-13 17:36:42
1149
原创 【C++笔记】引用、inline关键字和nullptr
引用不是新定义一个变量,而是给已存在的变量取了一个别名,编译器不会为引用变量开辟新的内存空间,它和它引用的变量共用一块内存空间。就像现实生活中的外号或者网名一样。引用的形式类型& 引用别名 = 引用对象int main()int a = 0;int& b = a;int& c = b;int& d = c;int m = 1;d = m;return 0;
2024-10-12 10:54:56
1227
原创 【C++笔记】C++基础语法
各位读者朋友们大家好!今天我们正式进入C++的学习。C++这门语言是由本贾尼博士在上世纪八十年代开创的至今仍在使用的计算机主流编程语言。C++的学习难度较大,我们坚持不懈,在不久的将来将它狠狠拿下。定义命名空间,需要用到namespace这一关键字,后面加命名空间的名字,这个名字自己随便取,然后跟一对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量、函数、结构体等。namespace本质上是定义出一个域,这个域跟全局域各自独立,不同的域可以定义同名的变量,所以上面的rand就不存在冲突了。
2024-10-04 18:28:52
1006
原创 数据结构之顺序表(C语言版)
今天开始进入数据结构的学习,要学习的第一种数据结构就是顺序表。在介绍顺序表之前先介绍一下数据结构,数据结构是数据在内存中的存储,组织的方式。数据结构是指相互之间存在一种或多种特定关系的数据的集合。接下来介绍顺序表。
2024-06-06 13:27:11
1563
原创 C语言指针详解(一)
各位读者朋友们大家好!上期我们讲完了C语言中的函数,这期我们来讲一下C语言中的指针。指针是C语言最重要也是最常被误解的特性之一,指针也是我们在学习C语言中最大的困难。那接下来我们对指针的内容来逐个击破。大家都知道内存是用来存储信息的,在计算机中处理数据时,需要的数据是在内存中读取的。在计算机中,内存被划分为一个个小的内存单元,每个小的内存单元的大小是一个字节。有了内存,我们往内存中存放或读取数据时需要借助内存编号,这个编号就叫做地址。通过地址我们就可以访问到内存空间了。因此可以这样理解:内存单元的编号 =
2024-06-04 14:35:28
631
原创 C语言函数详解
上面我们讲了库函数,库函数的功能是已经实现好的,只需要我们自己使用就好,那自定义函数应该就是由我们自己按照需求来实现的函数。通过我们自己定义实现的函数,可以提高我们的程序开发效率,也能给我们写代码更多创造性。type name(形式参数) {type:是函数的返回类型,可以是int、double或者是void型,void表示这个函数结束后什么都不返回name:是函数名字,只要有意义即可。()中放的是形式参数。{}中放的是函数体。
2024-05-26 00:37:22
1436
原创 C语言数组详解
数组是一组相同类型的元素的集合。需要注意的是:数组中存放的是一个或者多个数据,但不能没有元素,其次一个数组中存放放的元素类型是相同的。常见的数组有一维数组和二维数组,下面我们一一讲解。
2024-05-11 10:43:26
735
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅