自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 STL中stack,queue,privority_queue,反向迭代器的模拟实现

Container = deque这个叫做适配器,是一种复用。一、基本概念栈是一种**后进先出(LIFO, Last In First Out)的线性数据结构,仅允许在同一端(栈顶)**进行插入和删除操作。其核心操作包括:入栈(Push):向栈顶添加元素出栈(Pop):移除栈顶元素查看栈顶(Peek/Top):获取但不移除栈顶元素二、核心特性操作受限 只能访问栈顶元素动态大小 栈空间可动态扩展(链式栈)或固定大小(数组栈)

2025-04-08 21:46:29 636

原创 linux之进程控制

我们都知道main函数是代码的入口,但实际上main函数只是用户级别代码的入口,main函数也是被其他函数调用的,例如在VS2013当中main函数就是被一个名为__tmainCRTStartup的函数所调用,而__tmainCRTStartup函数又是通过加载器被操作系统所调用的,也就是说main函数是间接性被操作系统所调用的。而对于父进程来说,子进程是需要被标识的,因为父进程创建子进程的目的是让其执行任务的,父进程只有知道了子进程的PID才能很好的对该子进程指派任务。新进程为子进程,而原进程为父进程。

2025-04-02 22:29:02 1428

原创 STL中List的模拟实现

之前我们在实现string,vector的时候我们迭代器都没有都是他们的原生指针,在这边为什么要封装成一个类呢?首先string,vector他们本质上是一个数组,在空间上是连续的,我们指针++一个以后就到了下一个元素的位置。因此我们可以使用原生指针来实现。而一个结点需要存储的信息有:数据、前一个结点的地址、后一个结点的地址,于是该结点类的成员变量也就出来了(数据、前驱指针、后继指针)。list是一个带头双向循环链表,在构造一个list对象时,直接申请一个头结点,并让其前驱指针和后继指针都指向自己即可。

2025-04-02 20:44:14 384

原创 STL中vector模拟实现

insert()的写法,以前的写法就是给一个下标pos的位置,然后删除对应pos位置上的数据,而现在这个pos变成了指针,我们在使用指针插入对应数据的时候,特别容易出现迭代器失效的情况,也就是野指针的行为,为啥呢?resize函数实现的思路就是当输入n小于当前内存的时候我们就不需要初始化,并且跟新一下_finish=_start+n,,当大于的时候就需要分俩种情况,一种是当vector为空的时候,我们就直接在头部开始插入数据,第二种就是本来就有数据,需要尾插数据一直达到n个大小。这个很简单直接放代码。

2025-03-26 19:51:05 1021

原创 vector的介绍和使用

1、vector是表示可变大小数组的序列容器。2、vector就像数组一样,也采用的连续空间来存储元素,这也意味着可以采用下标对vector的元素进行访问。3、vector与普通数组不同的是,vector的大小是可以动态改变的。4、当vector需要重新分配大小时,其做法是,分配一个新的数组,然后将全部元素移到这个数组当中,并释放原来的数组空间。5、vector分配空间策略:vector会分配一些额外的空间以适应可能的增长,因此存储空间比实际需要的存储空间一般更大。

2025-03-24 19:43:11 1019

原创 string的模拟实现

【代码】string的模拟实现。

2025-03-20 21:00:59 182

原创 操作系统之进程

总结计算机管理硬件。

2025-03-17 16:59:56 624

原创 stl之string的详解

string();使用示例int main()string s1;//字符串//用s2来初始化s3;//从s2的位置开始,不写长度默认就是npos;//拷贝5个字符长度//拷贝10个字符return 0;

2025-03-16 22:44:22 596

原创 算法之双指针

如何做到划分区间呢?首先我们让dest放在-1的位置上,然后让cur从左向右遍历数组,在遍历过程中遇到俩种情况:第一种就是遇到零元素第二种就是遇到非零元素。我们cur遇到零元素的时候不处理,++cur,遇到零元素的时候,我们可以dest++一下,然后把nums[dest]和nums[cur]的位置交换一下,然后在++cur一下就行。

2025-03-16 13:47:55 238

原创 c++的动态内存管理以及模板的知识点

【代码】c++的动态内存管理以及模板的知识点。

2025-03-14 13:21:28 257

原创 类与对象(下)

引用,const成员变量,俩个特征都是必须在定义的时候初始化。

2025-03-11 18:51:11 841

原创 linux开发工具的使用

Linux中软件安装以及vim的命令模式的一些快捷方式

2025-03-10 14:11:17 688

原创 c++类与对象(中)

我们发现对Date对象里面的成员变量没有做初始化的工作,但是我们如果在Date类里面放一个自定义类型,结果又会不一样。

2025-03-09 19:32:26 814

原创 Shell的运行原理以及Linux当中的权限问题

我们之前学的指令就也叫命令解释器,我们所有的指令最终都要在os的内部运行,但是os使用难度较高,我们用户不能直接和os打交道,因此我们通过命令行解释器或者图形化界面和操作系统打交道。这个粘滞位:给目录设置,一般是共享文件,大家可以在目标内进行各自的文件的增删查改,只允许所拥有者能删这个文件,其他人一概不允许,t是一种特殊的x权限。账号的切换是不受约束的,su 用户名直接进去。在root的用户下 使用su 普通用户是不要输入密码的,直接就可以进入,如果是普通用户的话就需要输入对应账户的密码了。

2025-03-08 21:27:29 1057

原创 c++类与对象(上)

类的两种定义方式:1、声明和定义全部放在类体中。需要注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。2、声明放在头文件(.h)中,定义放在源文件(.cpp)中。我们一般喜欢采用第二种。

2025-03-06 11:55:10 909

原创 linux的常见指令操作

在Windows中我们可以通过Ctrl+C和Ctrl+V将一个地方的文件或目录复制一份到另一个地方,我们若是在Linux当中想要完成该操作,就要用到cp指令。1)-p dirname可以是一个路径名称,此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录。-r 或 -R 递归处理,将指定目录下的文件与子目录一并处理,若源文件或目录的形态不属于目录或符号链接,则一律视为普通文件处理。1)当第二个参数是不存在的名称时,mv指令完成文件重命名或目录重命名。

2025-03-05 22:04:50 836

原创 c++入门

编译的时候会显示命名冲突,原因头文件展开的时候跟库里面的函数名相同了,或者有时候不同的工程合并的时候会有互相之间冲突,因此命名空间的作用就是为了解决这些问题存在的。上面的代码从函数的重载的定义的上看是构成函数重载的,但是我们编译的时候会报错,会构成调用其义。这样子就解决了命名冲突的问题,命名空间里面的编译器一般不会主动去访问,要访问有俩种方法一种是直接展开,还有一种是指定访问命名空间域。缺省参数是声明或定义函数时为函数的参数指定一个缺省值。缺省参数分为全缺省以及半缺省;namespace+命名。

2025-03-02 13:36:50 207 1

原创 数组相关的面试题

在这个题目中我们这样比较会发现一个问题这样子比较就会变成1 2 2 2 2 2 5 6不符合题目的要求了,我们可以从后面往前面比较就行了,然后按照归并算法的要求,从前往后往前是比较小的,从后往前我们可以比较大的,这样的话,我们还是递增的了。在图中我们可以发现一直到end2结束,这个就基本归并结束了,但是假如我们换个数据将end2换成-1 -2 7我们可以发现end2结束不了,end1先走完了,因此我们要考虑俩种情况。

2024-11-18 12:50:50 309

原创 顺序表的详解——初始化,销毁,打印,增加,删除,查找以及修改等功能

顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。1我们可以发现顺序表其实就是在数组中管理数据的,那跟数组有什么区别呢,就是数组大小是固定的,而顺序表的长度是可以动态增长的2。

2024-11-17 21:23:42 883

原创 转轮数组(C语言实现)

方法一我们可以先把数字1 2 3 4逆转一下,第二步我们可以逆转一下5 6 7,最后整体逆置一下就会变成上面的数字。begin++;end--;int i = 0;for (i = 0;i < sz;这种方法我们一般都不太好想出来,但是还有简单的方法就是我们开辟一个数组空间出来.

2024-11-16 11:54:05 458

原创 消失的数字(c语言实现)

方法一我们使用异或操作符实现。介绍一下^操作符性质就是首先0^a=a;a^a=0;然后异或操作符还满足交换律。比如a ^ b ^ c ^a= a ^ a ^b ^c;我们可以通过这样的性质实现这个代码,上面的题目中我们发现数组中缺少一个元素2,我们通过这样的方式来我们先把数组中的数字遍历一遍,然后在遍历一遍0到n的数字。int i = 0;for (i = 0;i < sz;i <= sz;return val;

2024-11-15 11:13:59 513

原创 文件操作(4)

在文件操作函数(二)中,我们介绍了文件的顺序读写函数,即挨着顺序对文件中的数据进行输入或输出操作的函数。但是若只能规规矩矩地,从前到尾对文件进行输入输出操作,那么就比较笨拙,为了能更加灵活地对文件进行输入输出操作,出现了另一类文件操作函数,使得我们可以对文件进行随机读写。

2024-11-11 17:23:15 950

原创 文件操作(3)

在上篇博客介绍了如何正确的打开一个文件和关闭一个文件,今天我们来学习如何在文件中输出和输入数据。对文件数据的读写可以分为顺序读写和随机读写。顺序读写,即挨着顺序对文件中的数据进行输入或输出。在这片博客中,我们首先介绍文件的顺序读写需要用到的文件操作函数。我们今天这篇博客主要介绍这几个文件操作函数。

2024-11-11 15:15:56 1378

原创 c语言中的文件操作(2)

函数的介绍文件的打开形式相对路径与绝对路径文件的关闭函数-fclose正确的文件操作的流程前言通过前面的章节我们已经知道文件的基本的概念,我们如何通过代码对文件进行操作呢?比如我们如何打开文件,关闭文件,已经在文件中写入以及读取数据呢?在头文件stdio.h中包含了一系列的文件操作函数,以便我们对特定的文件进行相应的操作。学会对文件进行操作后,我们就可以将代码与文件联系起来,这样能让编程变得更有意思不是吗?

2024-11-11 11:06:08 908

原创 c语言文件操作(1)

每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字、文件的状态及文件的当前位置等)。定义pf是一个指向FILE类型的指针变量,可以使pf指向某个文件的文件信息区,通过该文件信息区中的信息就能够访问该文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,

2024-11-10 22:39:14 689

原创 c语言中的柔性数组

柔性数组其实也就是结构体中的一个数组,准确来说,是一个空间大小可以自由变换的数组,那么我们在结构体中定义一个指针,使指针指向的空间可以自由变换(即指针指向的是动态开辟的内存),也就达到了这个效果。在图中开辟的前面的sizeof开辟的是int i的空间,后面一个是柔性数组的空间。三、包含柔性数组成员的结构用malloc函数进行内存的的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。所以,当你用sizeof来计算一个含有柔性数组成员的结构体大小时,计算出的结果不包括柔性数组成员在内。

2024-11-10 10:16:56 609

原创 动态内存的相关知识点

此时,需扩展的空间后方没有足够的空间可供扩展,并且堆区中也没有符合需要开辟的内存大小的空间。的时候,原有空间之后没有足够多的空间时,扩展的方法是:在堆空间上另找一个合适大小 的连续空间来使用。free函数只能从开辟好的动态内存空间的起始位置开始释放,所以使用free函数释放动态内存时,传入的指针必须是当时开辟内存时返回的指针。今天学了动态内存管理的相关知识点,首先什么是动态内存呢,我的理解是可大可小的,能够动态变化的。有时会我们发现过去申请的空间太小了,有时候我们又会觉得申请的空间过大了,那为了合理的时。

2024-11-08 12:58:23 1427

原创 自定义类型枚举以及联合体

首先我们可以看第一个代码,char类型的大小是1个字节,与8的默认对齐数相比,1是最小的,他有五个char类型的元素,因此char c数组的大小是5个元素,int的大小是4个字节,我们看第一个条件,至少是最大成员的大小,这个联合体里面最大对齐数应该是4,5不是4的倍数,当浪费3个空间,到8的时候就满足第二个条件了。第二个一样的思路,short c数组的大小是14个字符,最大对齐数是4,14不是4的倍数,浪费2个空间到16,因此16是是第二个联合体的大小。因此刚刚的位段大小是三个字节的大小。

2024-11-07 17:06:05 902

原创 结构体的相关知识点以及通讯录代码分析

首先我们可以判断各类型的大小,如图中,与vs默认中的默认对齐数比较,取其最小值,为该成员变量的对齐数,第二个根据每个成员的对齐数画出他们在内存中的相对位置,第三个通过判断最大对齐数决定他们最终结构体的大小。这来个结构体的成员是一模一样的,可是当我们按照内存对齐规则来计算两个结构体的大小的时候,会发现两个结构体的大小不一样,在VS编译器下第一个结构体大小为8,第二个结构体大小为12。我们知道,整型变量有自己的大小,浮点型变量有自己的大小,数组也有自己的大小,那么结构体有没有自己的大小呢?

2024-11-06 18:25:21 923

原创 内存函数的相关知识点

当buf1等于buf2的时候返回0;memmove函数和memcpy函数的差别就是,memmove函数的源内存块和目标内存块是可以重叠的,而memcpy函数的源内存块和目标内存块是不可以重叠的。但是使用memcpy的时候,会打印成1,2,1,1,1为啥会变成这样呢?如果我们要将arr数组中的1,2,3,4,5,6,7,8,9,10我们要打印1,2,3,4,5放到3,4,5,6,7上去,应该怎么打印呢?就会变成7变5,6变4,5变3,4变2,3变1,最后打印就变成了1,2,1,2,3,4,5,8,9,10.

2024-11-04 18:43:48 1183

原创 【字符函数以及字符串函数

它的参数是两个指针,第一个指向的是追加字符串的目的地的起始位置,即要将字符串追加到什么地方;它的返回值是目标空间的起始位置。strstr函数可以在一个字符串(字符串1)中查找另一个字符串(字符串2),如果字符串2存在于该字符串1中,那么就返回被字符串2在字符串1中第一次出现的起始位置,如果在字符串1中找不到字符串2,那么就返回空指针(NULL)。首先经过第一个p1从a的地址经过while循环在遇到\0的时候跳出循环,来到如图中p1的位置,来到第二个循环,p把\0的位置覆盖掉,最后一直打印到\0停止循环。

2024-11-02 22:44:30 1341

原创 指针(3)

二维数组:int a[3][3]中a[0]作为第一行的数组名,没有单独出现在sizeof的内部,没有取地址,表示的数组首元素的地址即a[0][0]的地址,a[0]+1就是第二行的地址,如果单独放在sizeof内部,表示数组首元素的大小,即第一行所有元素的大小。3 除此之外,所有的数组名都表示数组首元素的地址,sizeof是指关注占有内存的大小,单位是字节,不关心内存中存放的是什么。4strlen是只求字符串长度的,统计的是'\0'之前出现字符串的个数,一定要找到\0才会停止,因此可能会越界访问。

2024-10-31 21:05:07 507

原创 指针(2)

这是一个简单的整型计算器的代码,只能使用双目操作符进行计算,而且想只能进行简单的加减乘除的功能,要想加入其他功能,就只能再加入case语句,然后再重复进行上面的代码,因此会显得代码很多余,以及很复杂,这时候我们就可以运用函数指针数组进行。这个是官网中的,是啥意思,第一个是指针,第二个size_表示有符号的整数,表示大小,第三个是表示字符的宽度,第三个要求一个函数指针,返回类型是int,参数类型是void*,void*.如图就是解释函数指针数组的图片,pf是一个数组,是用来存放函数地址的数组。

2024-10-30 13:46:11 295

原创 C语言的指针

数组指针就是指向数组的指针。比较容易跟指针数组混淆。注意概念,一个是指针一个数组,二者的写法也不一样。intp110intp2)[10第一个是指针数组,p1[10]先结合,然后剩下的就是数组的类型是int*,意思是存放一个数组大小为10的指针数组。而第二个有括号,先看括号里面的(*p2)说明是一个指针,然后数组类型是int[10],意思是一个指向数组大小为10的整型数组。

2024-10-26 22:38:05 924

原创 初识C语言(3)

本章主要讲函数, 数组 操作符,常见关键字一些简单的进行的理解。函数:下面使用普通方法写的的代码上面就是一个简单的求变量a,b的和,创造的一个函数Add的函数,函数必须包括申明和定义,当函数放在主函数前面的时候,就不需要额外的声明了,因为函数的定义就是特殊声明。

2024-10-25 16:47:30 1585

原创 c语言数据内容的存储

假如把14或者f6放在前面就变成14 00 00 00这种就是把低位的地址放在前面,而高位的地址00放在后面,同理把低位的f6放在ff的高位上,把高位上的ff移到f6低位上,就变成了f6 ff ff ff了,这种叫小端。0.5 (1/2)的二进制形式为0.1,由于规定正数部分必须为1,即将小数点右移1位,则为 1.0*2^(-1),其阶码为-1+127=126,表示为。现负数的,所以IEEE 754规定,存入内存时E的真实值必须再加上一个中间数,对于8位的E,这个中间数 是127;当S=1, V为负数。

2024-10-25 16:43:52 877

原创 初识C语言(2)

刚刚我创建的int a的变量就是全局变量,从主函数main开始打印出a的值,然后经过test函数,通过变量i的相加,打印出结果40;其中为啥打印出的结果是这样的呢,其原因就是字符串的末尾有一个\0的元素,当打印到这个元素的时候会自动停止,而字符a,b,c后面在没有遇到\0的时候会一直打印,因此会出现上面的步骤。编译报错,显示未申明标识符,这是啥原因呢?这次变得一样了,因此我们可以发现\0是字符串结束的标志,在计算长度的时候不算做长度。看来第二节课,为了方便以后自己的记忆,把大致内容写出来,以便自己的回顾。

2024-09-20 15:00:23 1620

原创 初识c语言

生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型等等) 有些值是可变的(比如:年龄,体重,薪资)。其中数据类型不能直接作为变量,第三个代码是错误的写法,而定义变量的方法是 变量的命名 只能由字母(包括大写和小写)、数字和下划线(_)组成。这里的1 2 4 4 8 4 8代表的单位是字节,1个字节表示2个比特位bit,1kb=1024字节,1mb=1024kb,1gb=1024mb;第一节课主要讲了1,2,3 ,4的内容,以及注意规范。首先什么是c语言呢,就是人与计算机的交流语言。

2024-09-19 12:48:07 1077 2

class108-master.zip

class108-master.zip

2024-09-22

空空如也

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

TA关注的人

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