自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++-入门

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}内部的成员便是命名空间成员。//命名空间的定义//命名空间内可以定义变量、函数以及结构int data;//命名空间也可以嵌套定义int b1 = 1;//B1里面嵌套定义B2int b2 = 2;一个命名空间就是一个作用域,命名空间中所有内容都局限于这个作用域当中。多个名字相同的命名空间会自动合并为一个命名空间。

2025-12-20 02:21:19 776

原创 数据结构-排序

快速排序的递归过程类似二叉树的前序遍历很像,因此快速排序的框架。

2025-11-25 18:28:29 916

原创 数据结构-二叉树

一、树的概念以及结构1.树的概念树是一种非线性的数据结构,它是由n(n>0)个有限节点组成的一个具有层次关系的集合。把它叫做树是因为其看起来像一棵倒挂的树,根在上,叶子在下。1.1 有一个特殊的节点,称为根节点,根节点没有前驱节点。1.2 除根节点外,其余节点被分为M(M>0)个互不相交的集合Tree1、Tree2、Tree3...Treem,其中每一个集合Treei(1<=i<=m)又是一棵结构与树类似的子树。每棵子树的根节点有且只有一个前驱,可以又0个或多个后继。1.3 因此树是递归定义的。注:树形结构

2025-11-20 02:21:37 887

原创 数据结构-栈和队列

因为队列需要进行头删和尾插相关操作,用链表的结构会更优一些,不过需要记录头结点的指针和尾节点的指针。当数据入队列的顺序为1234时,出队列的顺序也会只有一种:1234。(Last In First Out)的原则。压栈:栈的插入操作被称之为压栈/入栈/进栈,队列也分为两种:数组队列和链式队列。栈的实现方式有两种:数组栈和链表栈。栈除了要存储数据外还要保持。入队列:进行数据插入的操作,出队列:进行数据删除的操作,出栈:栈的删除操作叫出栈,

2025-11-03 03:06:40 393

原创 数据结构-链表

注:此处的cur是一个临时的结构体指针变量,用于存储结构体的地址,cur=cur->next相当于把cur指向的下一个节点的地址赋给cur这个临时变量,进行访问下一个节点。注:链表在逻辑结构上是连续的,但在物理结构上并不一定连续。并且链表的每个节点一般都是用malloc从堆区里申请出来的。注:链表的头插需要改变的是结构体指针phead,因此在传参时需要传入结构体指针的地址。逻辑结构是为了方便理解想象出来的,物理结构是实际内存中真实的存储方式。注:pos的值也不能等于phead,这一点可以进行另外的判断。

2025-10-31 20:28:16 1159 1

原创 数据结构-顺序表

注:顺序表的接口可以采用传值传参和传址传参两种方式,传值传参时形参是实参的临时拷贝,会有额外的空间消耗,传址传参则是传入结构体的地址,相较于传值传参,更推荐使用传址传参。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...但在物理结构上不一定是连续的,线性表在物理上存储时,通常以数组或链式结构的形式存储。注:静态顺序表的空间是固定的空间给少了可能不够用,空间给多了可能会浪费。相较于静态顺序表,更推荐使用动态顺序表。2.动态顺序表:使用动态开辟的数组存储元素。

2025-10-24 19:01:30 325 1

原创 数据结构-时间复杂度和空间复杂度

Fib函数在调用完Fib(2)后会把栈空间返还给操作系统,然后为调用Fib(1)申请栈空间,并且Fib(2)和Fib(1)用的是同一块栈空间,而且每一层的函数调用用的都是同一块栈空间,总共有N-1层。每次函数调用的时间复杂度都是O(1),总共有N+1次调用,因此递归阶乘的时间复杂度用大O渐进表示法可以表示为O(N)。递归过程中总共额外开辟了N个栈空间,递归阶乘的空间复杂度用大O渐进表示法可表示为:O(N)。随着N不断变大,N*N对F(N)的影响越大,2*N+10对F(N)的影响越小。

2025-10-21 15:11:58 647

原创 C语言-程序环境和预处理

程序同时也可以使用静态内存,存储于静态内存中的变量在程序整个执行过程会一直保持它们的值。条件不满足时,编译后的文件中不满足编译条件的代码会被删除。当宏参数在宏的定义中出现超过一次的时候,如果参数带有副作用,那么使用宏的时候可能会出现不可预测的后果。3.最后再次对结果文件进行扫描,看看它是否包含任意由#define定义的符号,如果有,就重复上面的过程。1.每次使用宏的时候,都会将一段代码插入到程序中,除非宏比较短否则可能大幅增加程序的长度。函数调用需要做的事情:使用前准备,函数栈帧的创建,计算,准备返回值。

2025-10-18 04:49:01 872

原创 C语言-文件操作

从内存向磁盘输出数据会优先送到内存中的文件缓冲区,装满缓冲区后才一起送到磁盘上,当从磁盘向内存输入数据时,会将从磁盘中读取到的数据先存放到内存的输入缓冲区中,等输入缓冲区满了以后再逐个将数据送到程序变量区。每个被使用的文件都在内存中开辟了一块相应的文件信息区,用来存放文件的相关信息(例如文件的名称、文件的状态以及文件当前的位置等等)。文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出数据内容到文件中。程序可以从多个流中进行读写,常见的有键盘,显示器,文件等。

2025-10-14 12:13:37 1129

原创 C语言-动态内存管理

栈区主要存放运行函数时分配的局部变量,函数参数,返回数据,返回地址等。,柔性数组整体只需要一次性malloc和free即可完成对整个结构的内存的申请和释放,相较于多次申请和释放,可以有效减少malloc和free过程中的出错。3.包含柔性数组成员的结构可以用malloc()来进行内存的分配,且分配的内存至少要大于结构体的大小,以适应柔性数组的预期大小。2.1.7 如果ptr所指向的空间不是动态开辟的,那free函数的行为是未定义的。2.数组在声明的时候,必须指定数组的长度,它所需要的内存在编译过程中分配。

2025-10-10 18:56:17 962

原创 C语言-自定义类型

4.当一个结构包含两个位段,第二个位段成员比较大,第一个位段剩余的位无法容纳第二个位段成员时,剩余的位是抛弃还是使用也无法确定。4.如果有嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,嵌套的结构体的大小是自身最大对齐数的整数倍。传值传参时,形参是实参的临时拷贝,如果结构体比较大的话,系统的开销也会变大,会降低性能。注:当结构体成员变量包含自己时,那么这个结构体的大小就无法进行计算,所以是不合理的。2.位段涉及很多不确定的因素,位段是不跨平台的,注重可移植性的程序尽量避免使用位段。

2025-10-09 04:44:08 902

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

1.11.3 memcpy是专门用来处理不相关,不重叠的内存拷贝的,如果source和destination有任何的内容重叠了,那么结果是不可预测的。1.9.4 strtok第一个参数不为NULL,strtok函数将找到str中的第一个标记,strtok将保存它在字符串中的位置。1.1.1 字符串以'\0'作为结束标志,strlen函数返回的是字符串中'\0'前面出现的字符个数(不包含'\0')。1.9.3 strtok会找到str的下一个标记,并将其替换成\0,返回一个指向这个标记的指针。

2025-10-05 23:41:21 1088

原创 指针和数组解析

1.sizeof(数组名),sizeof里面单独存放数组名,这里的数组名代表整个数组。2.&数组名,&后面单独接数组名,这里的数组名代表整个数组。4.字符串数组和sizeof。5.字符串数组和strlen。6.常量字符串和sizeof。7.常量字符串和strlen。1.sizeof和整型数组。2.sizeof和字符数组。3.字符数组和strlen。8.二维数组和sizeof。

2025-10-04 20:48:23 241

原创 C语言-指针进阶

一维数组和二维数组传参都是传首元素地址,一位数组首元素的地址是一维数组类型的地址,二维数组首元素的地址是一维数组的地址,也就是数组指针。一般来说数组名通常是指数组首元素的地址,但有两个例外sizeof(数组名)和&数组名,这里的两个数组名是指整个数组。注:函数去掉函数名就是函数的类型,和数组一样,数组去掉数组名也是数组的类型。&arr和&arr+1的差值是40,跳过的是整个数组的大小。一位数组的传参,形参部分可以是数组,也可以是指针。二维数组的传参,形参部分可以是数组,也可以是指针。

2025-10-03 21:42:00 814

原创 C语言-深度剖析数据在内存中的存储

首先,E是一个无符号整数,这意味着,如果E为8位,它的取值范围是0~255,如果E为11位,它的取值范围为0~2047。signed char的数值存储范围为-128~127,unsihned char的数值存储范围为0~255,并且这是一个循环的过程。对于32位的浮点数,最高的一位是符号位S,接着8位是指数位E,剩下的23位为有效数字M。对于64位的浮点数,最高位是符号位S,接着11位是指数位E,剩下的52位为有效数字M。注:本质上内存中存放的是二进制,在VS上为了方便表示,显示的是16进制。

2025-10-01 10:43:28 591

原创 C语言-实用调试技巧

断点的作用:可以在程序的任意位置按F9设置断点,这样就可以让程序在想要的位置停止执行,继而一步一步执行下去。F10:逐过程,通常用来处理一个过程,一个过程可以是一个函数,也可以是一条语句。看错误提示信息,主要在代码中找到错误提示信息的标识符,然后定位问题所在。,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好的使用。(Debug),又称除错,是发现和减少计算机程序或电子仪器设备中程序错误的一个过程。,它包含调试信息,并且不作任何优化,便于程序员调试程序。

2025-09-26 21:16:32 1039

原创 C语言-结构体

当一些复杂对象(例如学生信息、书籍信息等)不能通过内置类型(int、float、char、double等)直接描述表示时,就有了结构体用来描述复杂类型的对象。结构体传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,那么开销也就会变大,所以就会导致性能的下降。成员变量是用来描述结构体对象的相关属性的。成员变量的类型可以是标量、数组、指针、甚至是其他结构体。结构体:是存放一组类型不一定相同的元素的集合。-> 操作符:结构体指针->结构体成员。数组:是存放一组相同类型元素的集合。

2025-09-25 13:19:16 239

原创 C语言-指针

当我们知道数组首元素的地址的时候,因为数组又是连续存放的,所以我们就可以通过指针来遍历访问数组。数组中数组名一般是指首元素的地址,数组名==地址==指针,数组是可以通过指针来访问的。指针变量就是指针变量,不是数组,指针变量的大小是4/8个字节,是专门用来存放地址的。数组就是数组,不是指针,数组是一块连续的空间,可以存放一个或多个类型相同的数据。真实的二维数组在空间中是连续的,指针模拟的二维数组在空间中可能是不连续的。野指针是指指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)。

2025-09-25 12:38:54 600

原创 sizeof和strlen的对比

3.strlen是求字符串长度的库函数,只能针对字符串,strlen会寻找字符串中\0的位置,统计的是\0之前出现的字符个数。1.sizeof是操作符,strlen是库函数,要引头文件(string.h)。2.sizeof计算的是占有内存的大小,单位是字节,不关注内存中存放的具体数据。

2025-09-23 11:56:31 210

原创 C语言-操作符

算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式、下标引用、函数调用和结构成员。如果某个操作符的各个操作数都属于不同类型,除非其中的一个操作数类型转化为另一个操作数的类型,否则操作就无法进行。CPU内整型运算器(ALU)的操作数字节长度一般就是int的字节长度(8个字节长度),同时也是CPU通用寄存器的长度。1.当表达式1(exp1)为真时,表达式2(exp2)计算,表达式3(exp3)不计算。的计算结果如果是真则返回1,如果是假则返回0。

2025-09-23 11:46:07 1082

原创 C语言-数组

注:地址打印出来是16进制的,0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,其中A,B,C,D,E,F分别代表10,11,12,13,14,15。二维数组的使用也是通过下标的方式进行访问的,并且二维数组的行和列的下标也都是从0开始的。它就是数组访问的操作符。观察结果可知:二维数组在内存中也是连续存放的,并且地址也是由低到高变化的。数组的初始化又分为完全初始化和不完全初始化以及省略数组大小的初始化。数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值。数组的下标是有范围限制的。

2025-09-19 12:08:29 546

原创 C语言-函数

在程序员敲代码中,会有一些经常用到的功能,比如打印(printf),字符串拷贝(strcpy),计算n的k次方(pow)等等,它们不是业务性的代码。我们在开发的过程每个程序员都可能用的到,为了支持可移植性和提高程序的效率,所以C语言的基础库提供了一系列类似的库函数,方便程序员开发软件使用。1.在计算机学科当中,子程序(英语:Subroutine,procedure,routine,function,method,subprogram,callable unit)是一个大型程序的某部分代码,

2025-09-13 02:22:23 836

原创 生成静态库文件以及静态库文件的使用

3.最后引用头文件和输入#pragma comment(lib,"add.lib")就可以正常使用了。最后Ctrl+F5运行会在DeBug文件底下生成一个add.lib文件。2.常规--->配置类型--->应用程序改成静态库。目前已经拥有了add.h文件和add.lib文件。如下有一个add.h文件和一个add.c文件。1.在自己的项目文件中导入这两个文件。2.在头文件中添加现有项add.h。1.点中项目--->属性。

2025-09-13 00:39:38 170

原创 分支语句和循环语句

for语句中的break和continue在循环中和while中的意义是一样的,但continue一般不会导致for语句的死循环,因为for循环的调整部分并不在循环体中。continue是用于终止本次循环的,也就是本次循环中continue后面的代码将不会被执行,而是直接跳到while语句的判断部分,进行下一次循环的入口判断。默认的情况下if后面只能接一条语句,如果条件成立,并且想要执行多条语句,需要使用代码块,如下用{}括起来的就是代码块。for循环的初始化部分,判断部分和调整部分是可以省略的。

2025-09-08 15:37:43 908

原创 如何生成随机数

【代码】如何生成随机数。

2025-09-08 15:29:32 117

原创 二叉树进阶

比如英汉词典就是中文和英文对应关系,通过英文就可以快速找到对应的中文,英文单词和其对应的中文<word,chinese>就构成一对键值对。再比如统计单词次数,统计成功后,给定单词就可以快速找到其出现的次数,单词与其出现的次数就是<word,count>构成一对键值对。以词库中所有单词作为key构建一棵二叉搜索树,在二叉搜索树查找该单词是否存在,存在则拼写正确,不存在则拼写错误。二叉搜索树的具体操作是被设为公开的,根节点是被设为私有的,只能在类内才能访问。2.1 二叉搜索树的节点的定义。

2025-05-17 14:22:01 762

原创 C++多态

从上面看出,C++对函数重写的要求比较严格,但是有些情况下由于疏忽,可能会导致函数名字母顺序次序写反而无法构成重载,而这种错误在编译期间是不会报的,只有在程序运行时没有得到预期结果才来debug会得不偿失,因此C++11提供了override和final两个关键字,可以帮助用户检测是否重写。普通函数的继承是一种实现继承,派生类继承了基类函数,可以使用函数,继承的是函数的实现。虚函数的继承是一种接口继承,派生类继承的基类虚函数的接口,目的是为了重写,达成多态,继承的是接口。军人买票时是优先买票。

2025-05-13 12:17:46 905

原创 C++中的继承

组合中组合的只能访问被组合类的public成员,不能访问被组合类的protected成员。2.3.2 基类的private成员在派生类里面是不能被访问的,如果基类成员不想在类外面被直接访问,但需要再派生类里面才能被访问,就定义为protected。,这里体现了子类复用了父类的成员,通过监视窗口可以看出子类对父类成员变量的复用,调用Print可以看出子类对父类成员函数的复用。基类的其他成员在派生类里的访问方式==Min(基类成员的访问限定符,继承方式),public>protected>private。

2025-05-09 19:05:11 742

原创 Stack和Queue

1.2 stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层容器,并提供一组特定的成员函数来访问其元素,将特定容器做其底层实现,特定容器的尾部的插入和弹出即为stack栈顶的插入和弹出。1.2 队列作为容器适配器实现,容器适配器即将特定容器封装为其底层容器,queue提供一组特定的成员函数来访问其元素,元素从队尾入队列,从队头出队列。1.1 stack是一种容器适配器,专门用在具有后进先出的操作的环境中,其只能在容器的一端进行元素的插入删除和提取操作。back:获取尾部元素操作。

2025-05-07 16:00:00 879

原创 (笔记)List

1.5 与其他容器相比,list和forward_list最大的缺陷是不能支持任意位置的随机访问,比如:要访问list的第六个位置的元素,必须从已知的位置迭代到该位置,在这段位置迭代需要线性的的时间开销,list还需要一些额外空间开销,以保存每个节点的关联信息。list底层结构为带头双向循环链表,因此在list中插入是不会导致迭代器失效的,只有在删除时才会失效,而且失效的只是被删除的节点处的迭代器,其他位置的迭代器不会被影响。此处,可以吧iterator理解成为一个指针,指向list的一个节点。

2025-05-03 21:00:00 1496

原创 Vector

algorithm里的find进行查找时,如果找到则返回相应位置的迭代器,没找到则返回最后一个位置的迭代器,assign在进行拷贝时会对原来的数据完全覆盖,通过观察v3.begin()迭代器的位置可以发现和swap不同的是assign不扩容时不会改变原有vector的地址。1.2 和数组一样vector也是用连续存储空间来存储数据,也就意味着可以采用下标对vector的数据进行访问,和数组一样高效,但和数组不同的是,vector的大小是可以动态改变的,而且vector的大小会自动被容器处理。

2025-04-26 18:55:14 729

原创 String模拟实现

【代码】String模拟实现。

2025-04-25 18:37:07 111

原创 Linux基本指令(2)

cp指令用于复制文件或目录,如果同时指定两个以上的文件或目录,而最后的目的地是已经存在的目录,那么cp会把前面指定的所有文件全部复制到当前的目录中,但若同时指定多个文件或目录,但最后一个并不是已经存在的目录,则会报出错误信息。,其中test.c为有内容的文件,text.c为无内容的文件,此时mv的功能就是将test.c文件进行重命名为text.c然后进行覆盖原来的text.c文件。:more指令,功能类似cat,输出文件的内容,但和cat相比较,more能够更合适查看大文件的内容。

2025-04-22 15:08:08 1040

原创 String类

begin:返回指向字符串第一个字符的迭代器,end:返回指向字符串末尾字符的迭代器,也就是‘\0’的位置。resize的参数为size_t,为无符号整型。在使用String类时必须包含头文件和展开域。

2025-04-18 14:05:21 540

原创 日期类的实现

【代码】日期类的实现。

2025-04-17 17:43:53 345

原创 Linux基本指令

在每个文件名后附上一个字符说明该文件的类型,“*”表示普通文件,“/”表示目录,“@”表示符号链接,“|”表示FIFOs,“=”表示嵌套字。:在Linux系统组成的多叉树里是作为目录或文件的分割符形式的存在,同时在多叉树的最顶端也是作为根目录的存在。:删除一连串的目录,当子目录被删除后,如果父目录也成了空目录,那么也连带一起删除父目录。:对于目录,该命令列出当前目录下的所有子目录和文件,对于文件,将列出文件名和其他信息。:将目录的属性像文件一样显示,而不是显示该目录下的其他目录或文件。

2025-04-16 15:57:45 808

原创 Linux新建和删除一个用户

然后需要输入两次密码,并且密码是不显示的,并且两次输入的密码要一致,然后用户就会被添加成功了。然后登入root账号进行删除zhangshan用户即可,出现下面的情况就删除成功了。杀死zhangshan用户的进程也可以,然后再进行删除zhangshan用户。ctrl+d退出当前用户,直到回到一开始的没有任何账号登入的状态。如果是在同一台电脑上反复登入的话可能会出现下面这种情况。然后输入两次一样的自己想要修改的密码就好。然后输入自己设置的密码就可以成功登入了。1.先在Xshell登入自己的账号。

2025-04-16 11:14:05 429

原创 C++模板

如果在C++中,也能够存在这样一个模具,通过给这个模具中填充不同材料(类型),来获得不同材料的铸件(即生成具体类型的代码),那将会节省许多头发。这个Stack是专门用于存储int型数据的,当我们想同时存储int型和double型数据时,但独改变typedef的类型是不够的,需要把这个栈重新拷贝一份用来存储double类型。,就跟类的实例化一样,只有在传不同类型的参数时根据参数类型的不同,编译器自动实例化生成特定的函数,其实。,但当出现新的类型时,就需要我们手动去增加相应类型的函数。码,对字符类型也是如此。

2025-04-02 20:00:00 728

原创 C、C++内存管理

calloc比malloc要多一个参数,不需要认为计算空间大小,比如上面的代码是申请了20个int类型大小的空间强转为int*后赋值给n,和malloc最大的区别是。4.在对自定义类型的动态内存申请上,new申请空间时会调用构造函数,malloc不会,delete释放空间时会调用析构函数完成对空间内资源的清理,free不会。size是要申请的空间大小,需要我们手动计算,返回一个指针,指向已分配大小的内存,并强转为int*后赋值给p。,new申请空间失败会抛异常,malloc在申请空间失败则会返回NULL。

2025-04-01 13:38:20 860

原创 (标题)类和对象

这里要注意跟拷贝构造区分,

2025-03-28 22:00:00 1621

空空如也

空空如也

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

TA关注的人

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