自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 c++数据结构之c++11(三)

注:sizeof...是个操作符,可用于求可变参数模板实例化以后,参数包里参数的个数:如果想要把实例化以后,参数包里的数据(实参)取出来,很多人想到的是这样的方法:但这样是不支持的。此时若要解析出参数包的内容,需要进行包扩展:玩了一波递归,让参数包第一个参数传给x,其余参数传给第二个参数包args,然后逐个逐个取参数包首参数:但这里的递归属于编译时递归包的展开,不属于运行时的递归,运行时的递归自己调用自己,连函数参数的数量,种类都是一致的;而递归包的展开,每一层递归的参数数量是在减少的,且递归包里的参数数据

2026-06-14 15:42:39 279 21

原创 c++数据结构之c++11(二)

①.减少拷贝,提升效率。②.左值引用可以对。

2026-06-07 15:54:34 261 18

原创 c++数据结构之c++11(一)

{}初始化也叫作列表初始化。

2026-06-03 22:15:36 318 18

原创 c++数据结构之哈希

注:unorder_map和unorder_set的底层均是哈希。

2026-05-19 15:43:47 143 19

原创 C++数据结构之红黑树

Ⅰ.a,b,c,d,e,f子树全为空,c为新插入节点此时d,e,f子树bh = 0Ⅱ.c不是新插入节点,为之前的g节点(黑色)此时d,e,f子树bh = 1新插入节点的插入位置在a,b的4个子节点里选一个。Ⅲ.c不是新插入节点,为之前的g节点(黑色)但d,e,f子树的bh = 2无论子树d,e,f的bh被设计的有多大,子树变的多复杂,万变不离其宗,在处理时都向上,c移到当下子树g节点处,反复将上面子树的父亲,叔叔变黑,爷爷变红,直到整棵树满足红黑树规则。u为空,或者u存在且为黑。

2026-05-15 12:06:02 592 30

原创 c++数据结构之AVL树

既然左右子树,那么这棵树就接近一个满二叉树的状态,所以它的高度就是可控的,为。那么增删查改,也就是说,对比普通二叉搜索树那种极端高度差(一棵子树有接近n的高度,而另一棵几乎没有节点,效率为O(N))的情况,效率有极大的提升。

2026-05-08 22:10:24 700 27

原创 cpp数据结构之map

map是一个模板类。它的底层仍旧是一棵的红黑树(平衡二叉搜索树),但每个节点存在两个值(),。其中,key参与二叉树增删查改,决定了二叉树的结构,。但value是可以改变的。其中模板参数Key就是key的类型,T就是value的类型。那么,使用什么存储key和value呢?答案是pair类模板。

2026-04-29 17:45:56 543 19

原创 c++数据结构之二叉搜索树

二叉搜索树是一种特殊的二叉树,

2026-04-24 20:03:22 539 30

原创 c++进阶之继承

在类的基础上进行扩展,扩展出进而形成新的类,被称为这么干就实现了共有成员变量的,告别了冗余。

2026-04-15 15:29:35 482 27

原创 c++进阶之多态

666。

2026-04-13 18:37:58 617 24

原创 模板的进阶

得注意, 即便包含了, 在最后一步链接之前,整个项目不同文件依旧是独立的。而实例化恰恰就在链接前的编译阶段。

2026-04-08 20:27:43 342 19

原创 栈和队列的实现

stack:queue:这两个类模板利用container类型的成员变量_con,就能将相关容器的接口转换为stack或queue的接口。也就是并不需要从0实现栈和队列,将list,vector...容器拿过来,通过这两个类模板转换,即可实现。注:container是一个模板参数,可支持不同种类容器。为啥构造一个栈或队列的对象时,可以只传一个T类型,而不用传container的类型?原因在于在实现类模板时,已经给了container的缺省值。从两个图片可以看出,stack的默认适配容器是vector,因为v

2026-04-05 08:20:06 424 19

原创 list的实现

以l2,l1为例,范围for会编译不通过,原因在于l2这个变量并未被初始化,没有哨兵位,或者哨兵位的指向并不满足初始化的形式(_head->_next = _head,_head->_prev = _head),这样的l2是无法使用push_back的。这里的const迭代器所要实现的,是使迭代器所指向的内容无法修改,而非迭代器本身无法修改,所以要单独实现一个迭代器,而非单纯在iterator前添加一个const那么简单。而我们实现的是普通类型的迭代器,所以这里的范围for是不支持的。

2026-03-29 14:04:46 489 21

原创 list的使用及介绍

list是生成。由于获得某个特定节点的开销很大,需要逐个节点遍历,所以list不支持[]。

2026-03-25 17:07:40 291 15

原创 vector的实现

所以实现它用一个vector.h文件和一个test.cpp文件就行了。

2026-03-22 13:23:40 482 20

原创 字符串相乘

进行。

2026-03-18 19:49:12 161 17

原创 vector

注意:vector是一个实现顺序表的,在构造一个对象时一定要。且使用vector时要包含头文件:#include<vector>。

2026-03-16 16:54:01 349 17

原创 OJ——将字符串转换成整数

题目链接:此题我们将字符串划分为以上四个区域,然后用重载的[]对字符串进行遍历。

2026-03-15 11:42:21 268 13

原创 oj——模拟加法

让add存储当下两个string相同位上两数的和。用一个新的stringres去存储这一位上记得进位:也就是让add /= 2,当某一个string a中的下标,就不让add += a[i],以达到+0的效果,所以最后res是倒序,记得用reverse转成正序。

2026-03-14 21:40:41 218 7

原创 string的实现

注意:这个类的成员函数中,形参里,普通类型(char)的参数不用带const,因为是传值调用,变的是副本,不必担心原件被改变。而指针类型的参数需要带const,因为可以顺藤摸瓜,通过指针去改变指向空间里的数据。

2026-03-08 20:31:34 295 12

原创 String常用的接口

字符顺序表,底层是管理字符串的被实例化的模板类。可用其生成动态字符串数组(对象)

2026-03-07 09:34:13 262 12

原创 C++的模板

定义模板参数类型的关键字:class或typename,二者用法相同,没什么区别。\template里定义一个T,可对应一种类型。假如调用模板,模板里只有一个T,传参的时候,传了两个不同类型的数据,就会出错。模板具有一个机制:实参会将模板产生的函数的T推演为其对应的类型通过实参i将T1推演为int,通过实参a将T1推演为double类型,但模板参数列表中只有 一个T1然后就左脑互博右脑了。当出现与模板名字相同,其他条件也相同的函数,此时若调用,则会优先调用函数。毕竟函数是现成的,而调用模板后,模板还要自行生

2026-03-02 14:56:14 268 9

原创 C++内存管理

以上不同区域里的数据,。。

2026-02-27 19:57:52 300 5

原创 c++类和对象

public在类外可以供人访问或使用,而另两种不行。默认情况下(没给访问限定符),类里的成员是私有的。注意:Ⅰ.与c语言中结构体类型(struct + 结构体名)不同,c++里struct和class定义类的类型就直接是类名,不过c++可以兼容c,也就是说也可以写成struct+结构体名!!同时类里可以加入函数。只是struct定义类里默认限定符是public,而class默认是private。

2026-02-16 16:22:51 634 3

原创 c++基础

在该空间里可对各个类型的变量进行命名,,有助于多人协作。注意:大括号后不带分号!!

2026-02-02 15:41:10 637 2

原创 多种排序算法

首先下标的区间是[0,n-1],但为什么i无法取n-1呢?因为在该算法中,要插入的数据,即tmp,所对应的下标,始终是end+1;则需要对序列最后一个元素排序时,其下标为end+1,而end = n - 2(即倒数第二个元素的下标)。同时在代码中,我们始终让end每一趟初始值 = i,以实现for循环的遍历。所以在遍历最后一个元素时,i = n-2。

2026-01-14 22:29:17 649 2

原创 二叉树几个功能

关于递归算法,详情参见。

2025-12-12 17:44:26 59 4

原创 二叉树的遍历

所以我们在看一棵树时,要不断不断将它分解为根,左子树,右子树三个部分。->NULL(右)->NULL(右)->4->5->NULL(左)->NULL(右)->6->NULL(左)->NULL(右)所以遍历的结果就是:1->2->3->NULL(左)遍历一边就一条路走到黑(到一边的NULL)为止。根->左子树->右子树,

2025-12-06 12:40:29 299 1

原创 向下调整建堆和向上调整建堆的时间复杂度

利用等比数列求和公式:利用等比求和公式:N = 2^h-1显而易见,向下调整算法的效率是远高于向上调整的,同时对于向下调整,每层节点数越多,该层总的调整次数就越少,而向上调整则是相反。

2025-11-29 12:05:01 350 20

原创 堆的实现及应用

1.逻辑上:本质是一个完全二叉树(除最后一层外,其他各层节点达到了。大堆:上下两个有联系节点间,父节点的值 >= 子节点。小堆:上下两个有联系节点间,父节点的值 <= 子节点。,毕竟计算机除法是取整不留余数的。,且最后一层节点按下标,从。2.物理上:本质为数组。左到右依次按顺序排列。

2025-11-19 20:59:37 865 2

原创 设计循环队列(数组,取模法)

数列空和满判定条件均为head == tail,为区分两种情况,做出以下操作:

2025-11-10 20:26:13 357

原创 链表OJ之移除链表元素

创建一个新的空链表,如果新的节点里的val与输入的val不相等,则把该节点直接给新链表。

2025-09-17 22:07:26 546 1

原创 单链表的实现

data+指向下一个节点的指针。

2025-09-08 09:58:55 512

原创 printf,scanf ;fprintf,fscanf;sprintf,sscanf的区别

参数),只要将fprintf的第一个参数换为stdout就能做到跟printf同样的效果。sprintf增加了一个。2.同上,将fscanf的第一个参数换为stdin,可获得和scanf一样的效果。因此,fprintf比printf的作用范围更广(增加了一个。注:格式化就是已拥有自己类型(%d,%c.....)的数据。参数,同时sprintf只为内存服务,因此无需打开关闭文件。1.因此,sscanf与sprintf在逻辑上相反。一.几个printf的对比。二.几个scanf的对比。

2025-08-07 17:51:42 329 1

原创 文件打开与关闭

本篇主要是个人对各个知识点的见解,知识点简介在鹏哥课件上

2025-07-30 22:24:14 442 4

空空如也

空空如也

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

TA关注的人

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