自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++(初阶)(二十一)——unordered_set和unordered_map

c++11c++17。

2025-06-15 19:52:40 403

原创 C++(初阶)(二十)——封装实现set和map

c++封装实现set和map

2025-05-27 21:59:00 787

原创 一,关键字class和typename的区别

到底是类型还是静态成员,编译就会报错,所以为了让编译器明确知道T::Type是一个类型而非静态成员,就必须加上typename。上述两种声明方式是没有任何区别的,也就是说,在声明类模板或者函数模板时,关键字class和typename的用法上没有任何区别。在c++标准模板库,也就是STL中,使用了模板,在声明类模板和函数模板时,有两种方式。其中class和typename是类模板或者函数模板中模板参数的类型。嵌套依赖类型场景,在此场景下,必须使用typename。1,class可以声明或定义一个类。

2025-05-27 18:48:31 269

原创 C++(初阶)(十九)——红黑树

对于规则4,前序遍历,遍历过程中⽤形参记录跟到当前结点的blackNum(⿊⾊结点数量),前序遍历遇到⿊⾊结点就++blackNum,⾛到空就计算出了⼀条路径的⿊⾊结点数量。比当前结点小,再去和左孩子的结点比较;3,如果⼀个结点是红⾊的,则它的两个孩⼦结点必须是黑色的,也就是说任意⼀条路径不会有连续的红色结点。3,如果⼀个结点是红⾊的,则它的两个孩⼦结点必须是⿊⾊的,也就是说任意⼀条路径不会有连续的红色结点。4,对于任意⼀个结点,从该结点到其所有空结点(NULL)的简单路径上,均包含相同数量的黑色结点。

2025-05-23 23:18:37 707

原创 C++(初阶)(十八)——AVL树

二,更新后parent的平衡因⼦等于1或-1,更新前更新中parent的平衡因⼦变化为0->1或者0->-1,说 明更新前parent⼦树两边⼀样⾼,新增的插⼊结点后,parent所在的⼦树⼀边⾼⼀边低,parent所 在的⼦树符合平衡要求,但是⾼度增加了1,会影响parent的⽗亲结点的平衡因⼦,所以要继续向 上更新。3,插⼊结点,会增加高度,所以新增结点在parent的右子树,parent的平衡因子++,新增结点在 parent的左子树,parent平衡因子–

2025-05-17 21:26:41 834

原创 C++(初阶)(十七)——map

map的声明如下,Key就是map底层关键字的类型,T是map底层value的类型,set默认要求Key⽀持 ⼩于⽐较,如果不⽀持或者需要的话可以⾃⾏实现仿函数传给第⼆个模版参数,map底层存储数据的 内存是从空间配置器申请的。⼀般情况下,我们都不需要传后两个模版参数。map底层是⽤红⿊树实 现,增删查改效率是 O(logN) 1 2 3 4 ,迭代器遍历是⾛的中序,所以是按key有序顺序遍历的。map底层的红⿊树节点中的数据,使⽤pair存储键值对数据。

2025-04-30 22:30:36 481

原创 C++(初阶)(十六)——set

1,set的声明如下,T就是set底层关键字的类型2,set默认要求T⽀持⼩于⽐较,如果不⽀持或者想按⾃⼰的需求⾛可以⾃⾏实现仿函数传给第⼆个模版参数3,set底层存储数据的内存是从空间配置器申请的,如果需要可以⾃⼰实现内存池,传给第三个参 数。4,⼀般情况下,我们都不需要传后两个模版参数。5,set底层是⽤红⿊树实现,增删查效率是O(logN) ,迭代器遍历是⾛的搜索树的中序,所以是有序的。

2025-04-30 21:11:26 1330

原创 C++(初阶)(十五)——二叉搜索树

4,⼆叉搜索树中可以⽀持插⼊相等的值,也可以不⽀持插⼊相等的值,具体看使⽤场景定义,后续我 们学习map/set/multimap/multiset系列容器底层就是⼆叉搜索树,其中map/set不⽀持插⼊相等值,multimap/multiset⽀持插⼊相等值。key/value的搜索场景实现的⼆叉树搜索树⽀持修改,但是不⽀持修改key,修 改key破坏搜索树性质了,可以修改value。2,树不空,按⼆叉搜索树性质,插⼊值⽐当前结点⼤往右⾛,插⼊值⽐当前结点⼩往左⾛,找到空位置,插⼊新结点。

2025-04-30 17:11:21 524

原创 C++(初阶)(十四)——多态

多态是⼀个继承关系的下的类对象,去调⽤同⼀函数,产⽣了不同的⾏为。⽐如Student继承了 Person。Person对象买票全价,Student对象优惠买票。类成员函数前⾯加virtual修饰,那么这个成员函数被称为虚函数。注意⾮成员函数不能加virtual修饰。public:cout << "买票->全价" << endl;

2025-04-28 22:11:18 860

原创 C++(初阶)(十三)——继承

Person是基类,也称作⽗类。Student是派⽣类,也称作⼦类。

2025-04-28 21:12:07 1428

原创 C++(初阶)(十二)——stack和queue

该文章摘要介绍了C++中的stack、queue和priority_queue三种容器适配器。主要内容包括:1) stack和queue的基本操作函数表;2) priority_queue的详细说明,包括其默认降序排序、底层堆结构实现、默认使用vector容器等特点,以及其操作函数表;3) 简单使用和模拟实现的示例链接;4) 对deque容器的优缺点分析,指出其在头尾操作效率高但中间插入删除效率低的特性。文章提供了这些容器适配器的核心概念和关键操作函数,适合快速了解这些数据结构的基本特性。

2025-04-22 22:58:44 344

原创 C++(初阶)(十一)——list

list使用和模拟实现

2025-04-13 12:28:27 1135

原创 C++(初阶)(十)——vector模拟实现

但是我们需要注意的一点是在拷贝原空间的数据时,使用memcpy对内置类型的拷贝时满足我们的需求,但是在对自定义类型的拷贝时是值拷贝,也就是浅拷贝,不符合需求,此时解决办法是遍历原空间依次赋给新空间。可以想到的是把size_t类型修改为int类型,这样就可以解决,但是这样有引发新的问题,对于无符号整型类型没办法处理,所以直接两个都留下,构成了函数重载。但是如果仅仅只写这一种的话,在我们实现对迭代器区间初始化时,会发生错误匹配的情况,是模板实例化时的问题,2,即拷贝原空间的数据到新空间,并delete原空间。

2025-04-07 20:55:05 724

原创 C++(初阶)(九)——string模拟实现

【代码】C++(初阶)(九)——string模拟实现。

2025-03-27 18:53:28 265

原创 C++(初阶)(八)——string

string是一个模板,管理char的顺序表string存在于c++标准模板库std中,如果std没有展开需要加上std::底层是顺序表npos在32位系统下,最大为42亿多,-1是unsinged int类型的最大值(42亿多),作为npos缺省值。

2025-03-24 21:51:48 859

原创 C++(初阶)(七)——模板

(注意:不能使用struct代替class)

2025-03-17 17:29:40 552

原创 C++(初阶)(六)——内存管理

int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间 还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;free(p5);return 0;

2025-03-17 17:19:09 1003

原创 C++(初阶)(五)——类和对象(下)

3,

2025-03-15 12:25:02 975

原创 C++(初阶)(四)——日期类实现

先实现==函数,而正好我们又有<函数,直接复用,然后对二者取反更简单,而且一旦某处出现错误,能。2,直接复用前面的,小的日期不断++,当和大的相等时,++多少次,就是相差多少天。1,小的月和天,和大的对齐,算差多少天,年直接减,再处理闰年2月。首先我们最容易想到的就是,直接c,v上面的小于,但是更好的有;都需要++,但是前者返回++之后的值,后者返回++之前的值。上面我们实现了+=,所以在实现+时,直接复用+=就行了。年小就小,相等比较月,再相等比较天,其他为false。

2025-03-12 18:10:19 485

原创 C++(初阶)(三)——类和对象(中)

7,我们不写,编译器默认⽣成的构造,对内置类型成员变量的初始化没有要求,也就是说是是否初始化是不确定的,看编译器。对于⾃定义类型成员变量,要求调⽤这个成员变量的默认构造函数初始化。如果这个成员变量,没有默认构造函数,那么就会报错,我们要初始化这个成员变量,需要⽤初始化列表才能解决,初始化列表,我们下个章节再细细讲解。说明:C++把类型分成内置类型(基本类型)和⾃定义类型。内置类型就是语⾔提供的原⽣数据类型,

2025-03-12 18:00:30 861

原创 C++(初阶)(二)——类和对象

类(Class)是一种用于创建对象的蓝图或模板。它定义了对象(变量)的属性(数据)和方法(行为)。类是面向对象编程(OOP)的核心概念之一,用于组织代码并实现封装、继承和多态等特性。

2025-03-06 20:57:12 1023

原创 C++(初阶)(一)——入门基础

namespace只能定义在全局,当然命名空间还可以嵌套定义。

2025-03-02 23:15:47 585

原创 数据结构(初阶)(八)----排序

希尔排序法的基本思想是:先选定⼀个整数(通常是gap = n/3+1),把待排序⽂件所有记录分成各组,所有的距离相等的记录分在同⼀组内,并对每⼀组内的记录进⾏排序,然后gap=gap/3+1得到下⼀个整数,再将数组分成各组,进⾏插⼊排序,当gap=1时,就相当于直接插⼊排序。的"坑",然后从左向右找出⽐基准⼤的数据,找到后⽴即放⼊右边坑中,当前位置变为新的"坑",结束循环后将最开始存储的分界值放⼊当前的"坑"中,返回当前"坑"下标(即分界值下标),直到所有的记录插⼊完为⽌,得到⼀个新的有序序列。

2025-03-02 20:28:24 949

原创 数据结构(初阶)(七)----树和二叉树(前中后序遍历)

左右根。

2025-03-02 20:21:34 476

原创 数据结构(初阶)(七)----树和二叉树(堆,堆排序)

树是⼀种⾮线性的数据结构,它是由 n(n>=0) 个有限结点组成⼀个具有层次关系的集合。把它叫做树是因为它看起来像⼀棵倒挂的树,也就是说它是根朝上,⽽叶朝下的。• 有⼀个特殊的结点,称为根结点,根结点没有前驱结点。• 除根结点外,其余结点被分成 M(M>0) 个互不相交的集合 T1、T2、……、Tm ,其中每⼀个集合Ti(1 <= i <= m) ⼜是⼀棵结构与树类似的⼦树。每棵⼦树的根结点有且只有⼀个前驱,可以有 0 个或多个后继。因此,树是递归定义的。

2025-03-02 20:19:35 982

原创 数据结构(初阶)(六)----队列

概念:只允许在⼀端进⾏插⼊数据操作,在另⼀端进⾏删除数据操作的特殊线性表,队列具有。可以选择遍历队列,但是使用size次数较多,循环遍历,额外浪费时间。,因为如果使⽤数组的结构,出队列在数组头上出数据,效率会⽐较低。也可以在定义队列结构时,加上int size作为计数器。队列也可以数组和链表的结构实现,

2025-03-02 20:17:08 314

原创 数据结构(初阶)(五)----栈

栈:⼀种特殊的线性表,其只允许在固定的⼀端进⾏插⼊和删除元素操作。进⾏数据插⼊和删除操作的⼀端称为栈顶,另⼀端称为栈底。(先进后出)LIFO(Last In First Out)的原则。因为数组在尾上插⼊数据的代价⽐较⼩。

2025-03-02 20:15:38 473

原创 数据结构(初阶)(四)----双向链表

双向链表为空时,此时链表只有一个头结点(哨兵位),如果没有哨兵位,那么它就不能被称为双向链表,于是我们在对双向链表初始化时,一定要创建一个哨兵位。= phead,因为双向链表是循环链表,如果不加该条件,循环将会一直成立,这点与单链表不同。1,首先我们在进行删除操作时,需要保证链表有效且不能为空(即只有一个哨兵位时)。3,将最后一个结点的prev节点与哨兵位结点联系起来,使之成为新的最后结点。哨兵位不是有效结点,直接从哨兵位的下一个结点打印,直到循环到哨兵位结束。如果交换,d3的地址丢失,代码会出问题。

2025-02-28 20:48:09 1122

原创 数据结构(初阶)(三)----单链表

概念:链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。与顺序表不同的是,链表的结构类似于带车头的火车车厢,,链表的每个车厢都是独立申请下来的空间,每个车厢被叫做结点。结点由当前结点要保存的数据和保存下一个节点的地址(指针变量)。图中指针变量 plist保存的是第⼀个结点的地址,我们称plist此时“指向”第⼀个结点,如果我们希望plist“指向”第⼆个结点时,只需要修改plist保存的内容为0x0012FFc8链表中每个结点都是独⽴申请的(即需要插⼊数据

2025-02-28 16:48:53 526

原创 数据结构(初阶)(二)----顺序表

顺序表的增删查改

2025-01-18 17:09:10 334

原创 数据结构(初阶)(一)----算法复杂度

衡量算法好坏的标准,算法复杂度

2025-01-18 15:34:09 795

原创 C语言(十六)---- 预处理详解

对预处理过程的详解

2025-01-18 14:45:52 1056

原创 C语言(十五)---- 编译和链接

编译和链接

2024-12-10 12:08:13 914

原创 C语言(十四)---- 文件操作

C语言的文件操作

2024-12-03 21:33:26 1181

原创 C语言(十三)----动态内存管理

动态内存管理

2024-12-02 21:24:10 979

原创 C语言(十二)----自定义类型:联合和枚举

自定义类型:联合和枚举

2024-12-01 11:31:12 704

原创 C语言(十一)----自定义类型:结构体

C语言自定义类型结构体

2024-11-30 19:17:17 1756

原创 C语言(十)---- 数据在内存中的存储

整数在内存中的存储,大小端字节和字节序判断,浮点数在内存中的存储

2024-11-29 14:27:02 867

原创 C语言(九)----C语言内存函数

C语言内存函数,`memcpy`使用和模拟实现,`memmove`的使用和模拟实现,`memset`的使用,`memcmp`的使用和模拟实现

2024-11-28 13:37:17 1210

原创 C语言(八)----字符函数和字符串函数

字符分类函数,字符转换函数,字符串函数,strlen的使用和模拟实现,strcpy,strncpy,strcat,strncat,strcmp,strncmp,的使用和模拟实现,strstr,strtok,strerror的使用

2024-11-27 13:49:13 1314

空空如也

空空如也

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

TA关注的人

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