自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 neovim快速配置与食用方法

让neovim变成vscode

2025-04-07 02:50:15 296

原创 【CPP】CPP的STL(后篇)

本章节会着重了解和分析STL中关于树的相关数据结构以及手撕代码

2025-03-18 12:07:53 862

原创 【CPP】类与多态

例如典中典的火车票的例子,设计一个自助售票函数,设计一个父类为乘客,设计一个子类继承自父类为学生,再设计一个子类继承自父类为军人,每个种乘客类型可以买不同价格的票,当这类对象作为参数(传引用/指针)传进一个为父类"乘客"的自助售票函数中,根据函数判断生成符合当前乘客身份的票。覆写的概念很重要,从字面意思咱就知道,子类的情况可能会和父类不太一样,此时我们就可以覆写掉父类的方法,改成我们想让子类所呈现的模式,当然,这里的覆写在底层的角度上其实说不上是覆写,这个后面的小节会提到。

2024-10-08 21:35:52 1151

原创 【CPP】类与继承

父类,如果当前类的子类是多继承就会影响到子类,将当前类的子类中重复的当前类的父类部分合二为一,所以说虚继承关系到3个具有父子关系的类。发现了吗,平板电脑因为既继承了笔记本电脑,又继承了手机,所以其中包含了两个计算机的特性,这就产生了数据冗余和二义性的问题。在以上的例子中我们称反恐精英为玩家的子类,玩家为反恐精英的父类,反恐精英继承自玩家这个父类。简单来说单继承就是只有一个"继承链"的继承方式,类似于链表,每个类的父节点都是唯一的。标签,所有的底层全都是开放的,导致子类可以很轻松地使用到父类底层的所有东西。

2024-09-20 21:39:59 1181

原创 【CPP】模板(后篇)

但如果声明和定义分离了,调用的源头会在编译的时候找到函数声明但却没有找到含函数定义,这时候会假设存在这样的函数,但此时定义还是个模板,并没有被实例化,所以在找函数的时候,就会找不到,所以如果要进行声明和定义分离的话,就一定要函数定义实例化,这样才能在链接的时候有函数可找。不过从根本上说,函数特化其实并不好用,问题就出自上面这条"特化要求特化能传的,原模版也要能传",这就导致了一个重要的问题,假如说原模版使用了传引用传参而不是传值传参,就会出现很多问题。先赞后看,养成习惯!模版的特化可以理解为模板的重载。

2024-09-17 21:51:16 738

原创 【leetcode精选】盛水最多的容器

首先我们知道,计算能盛多少水,就是算这个框住的方形的长宽,长很大,宽很小,算出来就很小,长很小,宽很大,同样也白搭,我们要做的就是尽可能保证长和宽都很大。不难看出,这种写法包含大量的重复计算,每对数会被重复匹配两次,工作量相当于翻了一倍,显然不妥当,且时间复杂度为O(n^2),速度慢。不难看出,这种方法中,左指针一共要挪动n次,每次挪动后要匹配(n-left-1)次,时间复杂度还是O(n^2)更新,当移动指针完成一轮之后,更新固定指针,指向下一个数,不断重复直至固定指针超出范围,结束循环。

2024-09-05 01:38:58 843

原创 【CPP】CPP的STL(前篇)

简单来说:CPP在有了模板之后,很多重复性质的代码就不需要自己手撕很多遍了,甚至说有前人做了一个库,把常见的算法,数据结构啥的放进库里面,这些数据结构,算法啥的全都采用了模板类和模板函数的形式,使得这个库里的代码复用率极高,况且写这个库的人都是大佬级别的大佬,效率也很不错,所以在CPP实际开发中,就不需要自己再造轮子了,调用这个库里的玩意就行STL目前有两个需要去学习的版本,一个是微软家的PJ版,一个是GCC(Linux)的SGI版,这俩调用的效果都是一样的,只是底层不一样,需要了解一下。

2024-08-12 21:47:59 1012

原创 【CPP】CPP的模板(前篇)

模板是分割C和C++的重要的分水线,决定了C语言注定不能取代C++设计模板一般咱称作为泛型编程,泛型编程即通过数据类型编写代码,使得同一段代码能够不断复用,提高了代码的复用性模板一般分为函数模板类模板public:,_size(0),_capa(n){}~Stack()_size = 0;_capa = 0;"

2024-07-22 20:45:48 1230

原创 【CPP】CPP的内存管理

内存池是向堆申请的一部分空间,用来专门存放经常需要申请和释放内存的数据,内存池与堆是独立开的,所以如果想从内存池中申请空间,就不能用在堆申请空间的那套模式,于是就有了以上模式,相当于手动模拟申请空间,只不过实际上申请的是内存池的空间。的区别,主要还是体现在CPP引入的一些新内容上,为了适配CPP引入的新内容,前者是后者的升级版。CPP可以继续使用C的内存管理方式,但CPP引入了更加方便的关键字用于内存管理,即。,也是可以手动调用的,但构造函数没办法手动调用,就是能靠。的定义,前者只是后者的一部分而已。

2024-07-22 20:20:10 1007

原创 【CPP】CPP的命名空间&输入输出&缺省参数&函数重载

域影响编译的时候查找变量的/函数/类型出处(声明/定义)的逻辑,有了域隔离之后,就能避免名字冲突的问题,局部域和全局域除了会影响编译查找逻辑之外,还会影响变量的生命周期,命名空间域和类域不影响变量的生命周期。命名空间的这个操作就像是厕所一样,厕所有我家厕所,也有同事家厕所,都叫厕所你说你要用厕所,我咋知道你要用谁家的厕所?于是就加一个前缀说明一下,要用谁家的厕所。编译查找一个变量的时候,默认情况下,会优先查找局部域,然后是全局域,但不会去查找命名空间域,所以一般对于命名空间的访问,有以下几种。

2024-07-09 15:32:21 858 5

原创 【CPP】CPP中类 -- class 的基本使用

类是面向对象的一种设计,其中封装了我们对对象的"描述",或者说对象的"特征"比方说我们要描述一个游戏玩家,那么这个玩家至少要有以下"特征"玩家在地图中的位置玩家的速度等等在本节我们也会不断地举玩家这个例子int x, y;int speed;int main()//创建一个player变量//创建一个player变量一般称创建一个新变量的过程为"实例化",新的变量称为"对象"类的基础定义其实和结构体没什么两样,但以下我们来讲讲类的进阶玩法static。

2024-06-26 13:51:42 1299 3

原创 【CPP】CPP的语法糖&引用&内联函数&nullptr

引用可以当作一个变量使用,但定义的引用在内存中并不存在,你可以理解为变量的一个别称,类似于typedef,只不过typedef是给类型取别名,而引用是给变量取别名int a = 10;ref = 1;//此时a就被改成了1了在以上代码,ref即a的引用,值得注意的是,这里ref的类型应该是int&和int应该是一体的编译过后ref会被替换成a,原本的ref和ref的定义会直接消失如果你想中途更改ref引用的目标变量,那请你把ref改成指针,因为ref压根就不能改int a = 10;

2024-06-23 00:13:47 629 8

原创 【数据结构】【C语言】归并排序~动画超详解!

请看完整动画:

2024-06-16 23:32:48 467 11

原创 【数据结构】【C语言】快速排序~动画超详解

博主研究快排的时候,花了一个下午调试bug,死活搞不明白为啥逻辑没错也会排序失败,直到对比其他人的代码之后才明白,,于是有些前人认为,霍尔版的快排似乎很容易犯这样的错误,于是就有了下面的前后指针法。1.霍尔版快速排序(未优化)2.霍尔版快速排序(优化版)3.前后指针法快速排序。

2024-06-07 23:32:37 1066 15

原创 【数据结构】二叉树的层序遍历~动画超详解

比方说这颗二叉树:前序遍历:层序遍历:

2024-06-02 19:28:53 727 22

原创 【数据结构】【C语言】堆~动画超详细解读!

简单来说堆是二叉树的一种表示方式,它在逻辑上就是一颗完全二叉树,它在物理上却是一个数组,这么说可能有点抽象,我们原来学习的栈,队列,或者说顺序表,链表等等,他们的逻辑结构和物理结构是相同或者相似的,就会比较好理解一些,而在堆这里物理结构和逻辑结构截然不同,理解相对就会比较抽象一些,我们接着看//堆在物理上是一个数组,我们直接按数组的定义方式就行//类型定义int size;int capa;}Heap;

2024-05-24 02:35:46 1988 65

原创 【LeetCode例232】【C语言】用栈实现队列~动画超详细解读!

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作**(push、pop、peek、empty)**:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true;否则,返回 false。

2024-05-16 04:05:20 1191 32

原创 【数据结构】【C语言】队列 动画详解

队列是一个带有限制的线性表,他限制在你只能从尾部进入数据,再从头部出数据,就像排队一样,先进去的肯定先出来,后进去的肯定后出来(我么们来看看动画)队列我们一般用链表实现,当然用顺序表其实也是可以的,只是说用起来没有链表方便//链表节点定义}QNode;int size;}QU;

2024-05-16 01:38:53 443 12

原创 【数据结构】【C语言】栈 动画详解

所以,我们说栈就是一片特殊的顺序表,用于暂时存储某些数据,先放进栈的最后出栈(使用),后放进栈的最先出栈(使用),就有点像羽毛球筒一样,先放进去的羽毛球最后使用,后放进去的羽毛球最先使用,因为栈的限制性,他只允许栈顶的元素改变(我们可以看看动画)这里pdata应该是一个数组的指针,这个数组的空间我们在栈初始化的时候再申请pdata — 数组top — 栈顶下标capa — 当前栈能承载的元素数int top;int capa;}ST;

2024-05-15 23:23:44 624 8

原创 【LeetCode LCR 022】【C语言】环形链表 II

给定一个链表,返回链表开始入环的第一个节点。从链表的头节点开始沿着next指针进入环的第一个节点为环的入口节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。如果pos是-1,则在该链表中没有环。注意,pos仅仅是用于标识环的情况,并不会作为参数传递到函数中。不允许修改给定的链表。示例1:输入以下链表,值为3的节点为head节点返回值应该为值为2的节点示例2:输入以下链表,值为1的节点为head节点。

2024-05-12 19:04:12 959 14

原创 【LeetCode例141】【c语言】环形链表

给你一个链表的头节点head,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。pos不作为参数进行传递。仅仅是为了标识链表的实际情况。如果链表中存在环,则返回true。否则,返回false。

2024-05-06 23:03:15 1158 16

原创 【数据结构基础】时间复杂度

简单来讲,时间复杂度就是一个函数(数学意义上的函数),这个函数用于表示一个程序或者一串代码运行完所需要的时间量级我们来看一段代码i < n;这里count在循环里不断 ++ 了 n 次,记作T(N)注意:这里其实我们不关注循环里面的内容,因为循环里面的内容不管是什么对于CPU来说都是一瞬间就可以完成的事,所以我们只关注循环次数而非循环里的内容再比如这个函数i < n;i++)j < n;

2024-04-27 00:29:07 842 9

原创 【C语言数据结构】分割链表

这里挂上题目链接给你一个链表的头节点head和一个特定值x,请你对链表进行分隔,使得所有x的节点都出现在x的节点之前。你不需要每个分区中各节点的初始相对位置。比方说下面的例子,x为3。

2024-04-19 13:36:46 978 1

原创 【C语言基础】随机读写函数的介绍与用法

不同于顺序读写,我们知道顺序读写是从头读到尾,但实际上我们生活中常用的大多是随机读写假设我们在一个文本中有字符串”abcdef”,顺序读写只能从a开始读,但有时候我们并不需要a啊,假设我们需要e呢,于是就有了随机读写这种东西了,用奇淫技巧来实现指哪读哪的效果。

2024-04-02 23:06:51 696 1

原创 【C语言基础】fgets函数详解

首先第一个参数,这里应该传一个空字符串进去,他会把读到的字符串拷贝到这个空字符串里面,第二个参数是你想一共要读到的字符个数(注意,这里包括’\0’的空间,这么说把,假设我们一共就在这里写了10,那他实际只会读9个字符,最后一个字符默认补上’\0’,传到str的最后一个空位),第三个参数是目标文件指针。当然,细心的你肯定会发现,因为fgets传给str的字符串末尾一定带一个’\0’,所以我是不是可以每次只传两个字符给str,也能实现相同的效果呢。值得确定的确定的是,这个函数只会读一行的内容,并不会跨行读取。

2024-03-31 18:51:53 1355 1

原创 【c语言基础知识】动态内存函数的介绍

简单来说,malloc函数就是用来开辟内存空间的我们去cplusplus上看下函数定义不难看出,这里参数只有一个,就是你想开辟的字节数,然后返回值为void* 的指针,想用别的指针得自己强转如果开辟失败就会返回空指针我们举个简单的例子这里我给int型指针pa开辟了40个字节的空间,如果返回为空指针就打印错误,并且返回1,然后在开辟的空间里放值,再打印注意malloc的返回值一定要判断,不然指不定在哪个地方就会出事儿,然后你还发现不了再举个例子,我们切换到x86环境下,再改一下开辟的空间量。

2024-03-26 00:29:22 467 1

原创 【C语言】经典例题:实现一个函数,可以左旋字符串中的i个字符

实现一个函数,可以左旋字符串中的i个字符

2024-03-06 23:24:14 669 3

原创 关于“arr+1”是地址+1还是下一个元素的解释

因为我们在定义数组的时候,给每个元素分配了空间和下标,你可以理解为这个空间被整合了,成了一个单独的个体,所以我们指向下一个元素的时候,只需要将arr+1即可。这里在写的时候就遇到了问题,如果是int型数组,可不可以用arr+4?为什么arr+1是下一个元素而不是当前地址的下一位?最近在写一道题:要求运用函数求一个字符串的长度,且不使用中间变量。希望能给学c的你一点帮助。

2023-11-14 02:37:04 135 2

【learn-cpp】

learn_cpp栏目的相关图例

2025-03-17

空空如也

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

TA关注的人

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