自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux环境基础开发工具使用

git三板斧(git clone,git add. , git commit -m " xxx ", git push)完整写法是这样,.PHONY:clean是修饰clean为目标文件,成为为目标,总是被执行。上边网址是程序的翻译环境可以看看类似gcc和g++的流程,这里是直接生成可执行文件的命令。Linux中我们也要进行工具/指令/程序安装卸载等,需要yum安装软件。make就是帮你做这个命令,makeclean就是清理这个命令。yum install -y 软件名。c++只能用g++编译。

2025-12-04 18:29:16 295

原创 Linux权限

你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使用的bash。正常情况下other有w权限,谁都可以进来删除文件,这里第三位变成t代表粘滞位,具有x的意义,同时对目录权限也有限定。三个字母为一批,前三个是拥有者权限,中间是所属组权限,最后是other其他人权限。紧接着有九个字母,分别是rwx和-,r是读权限,w是写权限,x是可执行权限。

2025-12-02 15:49:22 494

原创 Linux环境及指令

(root的家目录就是/root,普通用户的家目录是/home/xxx)建议把创建文件/目录统一放在家目录下。man+数字(1 2 3)+命令,查找手册,1号手册是linux命令,3号手册是库函数。输入什么,cat就打印什么,cat从键盘文件读取什么,就从显示器文件写入什么。访问一个文件的本质就是先找到他,找到文件的本质就是在多叉树找到它。把本来应该从键盘文件读入的内容,更改为从普通文件读取,输入重定向。>是输出重定向,每次都会将文件内容覆盖(先清空,再写入)less 文件比more方便,可以回车上下键。

2025-11-25 14:08:11 1017

原创 问卷考试系统测试文档

测试目标:验证用户注册登录、项目管理、我的题库、个人设置等核心模块的功能正确性。测试周期 :2025-09 ~ 2025-10测试模式 :个人独立完成测试分析、用例设计、功能测试、自动化实现及报告总结。

2025-10-27 15:23:22 986

原创 博客系统测试文档

测试目标:验证`用户登录`、`文章发布`两大核心业务流程的功能正确性。测试周期: 2025-08 ~ 2025-09测试模式:个人独立完成从`测试分析` -> `用例设计` -> `手动测试` -> `自动化实现` -> `报告总结`的全流程。

2025-10-27 13:33:56 670

原创 AVL树详解

/ 旋转处理elsebreak;else// 插入之前AVL树就有问题if (subRL)elseelseif (subLR)elseelseelse。

2025-03-21 18:08:28 1380 2

原创 map和set

在初阶阶段,我们已经接触过STL中的部分容器,比如:vectorlistdeque等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。那什么是关联式容器?它与序列式容器有什么区别?也是用来存储数据的,与序列式容器不同的是,其。这里一般用pair这个类模板来表示键值对,map部分我会讲键值对的东西,这里大致看一下根据应用场景的不桶,STL总共实现了两种不同结构的管理式容器:树型结构与哈希结构。。这四种容器的共同点是:使用平衡搜索树(即红黑树。

2025-03-19 21:14:33 916

原创 c++初阶易错题(选择)

B.指针可以改变指向,引用不能,故错误C.空指针没有任何指向,删除无害,引用是别名,删除引用就删除真实对象D.引用必须初始化,所以不能为空引用,指针可以2A.引用必须初始化,必须在定义引用时明确引用的是哪个变量或者对象,否则语法错误,指针不初 始化时值为随机指向B.引用一旦定义时初始化指定,就不能再修改,指针可以改变指向C.引用必须出示化,不能出现空引用,指针可以赋值为空D.简单粗暴的引用理解可以理解为被引用变量或对象的"别名"

2025-03-18 17:19:22 1112

原创 数据结构易错题

有效长度一般是rear-front, 但是循环队列中rear有可能小于front,减完之后可能是负数,所以需要+N,此时结果刚好是队列中有效元素个数,但如果rear大于front,减完之后就是有效元素个数了,再加N后有效长度会超过N,故需要%N。树度为4,最小深度就是每个结点的孩子都是4的时候深度最小,4的0次方+4的一次方+4的2次方+ +4的n次方,当n为6的时候结点个数刚好大于1000,所以最小深度就是6。只有快排是有两种情况,有序是n方,三数取中能约等于n*logn,其他排序均为1种情况。

2025-03-17 17:13:58 1352

原创 栈和队列数据结构

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。栈中的数据元素遵守后进先出LIFO)的原则。压栈:栈的插入操作叫做进栈压栈入栈,。出栈:栈的删除操作叫做出栈。。可以看到栈是一种后进先出的数据结构,类似一个数组,入数据尾插,出数据尾删,栈顶数据就是尾数据,依据这个理解栈就很简单并且栈可以实现为数组栈,也可以实现尾链式栈(支持尾插尾删就可以)下边讲一下栈的实现栈的实现一般可以使用,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。

2025-02-22 16:50:19 1152 17

原创 数组和指针常见笔试题(深度剖析)

如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。1. sizeof(数组名),这里的数组名不是数组首元素的地址,数组名表示整个数组,sizeof(数组名)计算的是整个数组的大小,单位是字节。数组名是数组首元素的地址,arr[1]拿到的是arr1数组名,再使用下标就能访问数组的元素,很简单。2. &数组名,这里的数组名表示整个数组, &数组名取出的是整个数组的地址。是指针,指针指向的是一个函数,指向的函数无参数,返回值类型为void。

2025-02-19 16:23:27 669 12

原创 c语言易错题(选择)

再下一行是一个逗号表达式,会将最后一个逗号之后的结果赋值给b,也就是说++c将c变成7,c++不变因为是后置(先使用后++),++a,a为7,a++不变,然后将7赋值给b,b为7,而c和a各有一个后置++会在赋值b之后使用,a和c变为8。全局变量i默认是0,i--之后i是-1,进入if比较的时候,记住sizeof返回值是无符号数,相当于是-1>4是否成立,如果你没有注意sizeof返回值是无符号数,那肯定选<n是单独的4字节,由于是union,所以n与s共用空间,只取最长的元素,故占用16字节。

2025-02-18 22:28:58 905 7

原创 二叉搜索树

二叉树在前面C数据结构阶段已经讲过,本节取名二叉树进阶是因为:1.先铺垫二叉搜索树,而二叉搜索树也是一种树形结构2.3.,在前面讲解,且时间长容易忘4.因此本节借二叉树搜索树,对二叉树部分进行收尾总结。

2025-02-08 23:42:41 1151 20

原创 c++多态(详解)

首先如果是普通对象,是一样快的。子类实例化出的d对象,存放的是父类的虚表指针以及成员,和自身成员,并且可以看到虚函数完成了重写,d对象中父类的虚表指针指向的虚函数表已经改变(重写了func1,func2还是原来的)从这里我们又能理解到多态的意义,只有完成虚函数表的重写,才能实现多态。是的,因为是不同的类,实例化出的对象就不一样,相同类定义的对象共享一张虚表(因为一个类不管怎么实例化对象,虚函数都是那几个),不同类定义的对象肯定用的不同虚表,因为虚函数的个数可能就不相同,如果父类子类共享虚函数表就乱套了)

2025-02-07 11:58:14 1590 20

原创 c++继承

继承的概念继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。继承定义继承方式(在派生类的访问方式)总结:基类的private成员不管用什么继承,在派生类内部或者外界(main函数内部)都不能访问(mian函数内部可以用公有的成员函数)

2025-02-05 22:02:45 947 14

原创 模板的进阶

一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。如果模板声明和定义分离,有两个cpp文件像这种情况因为编译的时候两个cpp文件互相不知道对方“长啥样”(两个cpp各自有头文件的包含,头文件展开只有声明),Stack.cpp找不到要实例化的类型(不正常),test.cpp找不到模板的定义(正常,可以链接找地址,如果链接再找不到定义就会报错)

2025-02-05 01:16:11 1011 13

原创 stack和queue优先级队列(详解)

test.cpp。

2025-02-04 21:24:02 696 7

原创 list容器(详解)

头插,尾插,尾删是一样的,复用insert,erase逻辑就行这部分在c语言实现数据结构链表那里讲的很详细了,想看的可以看看代码样例讲解这是一个很基础的尾插和打印对象逻辑,可以用第一个迭代器打印,也可以用第二个,范围for打印(范围for底层就是迭代器,无脑替换成迭代器进行打印),可以看到*it和it++,都是我们封装成类的功劳,原理很简单前面讲过测试插入删除逻辑,可以看到不管是头插,头删,尾插,尾删都很清晰明了,clear是直接删除有效结点只剩哨兵位,所以打印不出来。

2025-02-03 18:01:20 1425 16

原创 string类详解

C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可 能还会越界访问。在OJ中,有关字符串的题目基本以string类的形式出现,而且在常规工作中,为了简单、方便、快捷,基本 都使用string类,很少有人去使用C库中的字符串操作函数。

2025-02-02 17:11:12 1066 8

原创 vector容器(详解)

capacity的代码在vs和g++下分别运行会发现,

2025-02-02 16:04:09 1816 8

原创 类与对象(下)

记住,c++规定某些类型比如const和引用必须在定义的时候初始化,初始化列表就是定义的地方,Date d1是定义对象的地方,初始化列表是定义每个成员的地方,因为定义意味着开空间,开了空间才能使用它们。内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。友元函数很简单,就是在类内声明,在类外可以用这个类的私有成员,并且友元函数是实现在全局的,没有this指针。静态成员变量在类内声明,在类外定义,(因为要走初始化列表,静态成员是类每个对象的公有,不能走初始化列表)

2025-01-26 18:05:00 1227 10

原创 类与对象(中)

如果一个类中什么成员都没有,简称为空类。空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。这六个默认成员函数用户不写编译器会自动生成,下边我来一一讲解对于以下Date对于Date类,可以通过Init公有方法给对象设置日期,但如果每次创建对象时都调用该方法设置信息,未免有点麻烦,那能否在对象创建时,就将信息设置进去呢?是一个,以保证每个数据成员都有 一个合适的初始值,并且。

2025-01-25 23:07:18 1402 10

原创 类与对象(上)

比如:之前在数据结构初阶中,用。

2025-01-24 20:39:01 929 6

原创 顺序表和链表(无敌详解)

线性表()是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。注意我们学习数据结构也就是学习增删查改,后期会围绕这四个字进行讲解,本文的讲解会把基础模拟实现部分讲的很透彻,算法oj题可以基于基础知识向外扩展,有了基础数据结构理解相信算法oj题也很好拿下了顺序表是用一段。

2025-01-22 21:54:46 1558 30

原创 二叉树和堆(补充)

的。注意,二叉树习惯把问题切分为子问题。

2025-01-20 23:35:34 1222 5

原创 二叉树和堆

的。注意,二叉树习惯把问题切分为子问题。

2025-01-19 23:17:29 1308 27

原创 算法的时间复杂度和空间复杂度

前面我说过计算的是开辟空间的深度,其实斐波那契和求阶乘递归的深度在参数是N的时候深度都是一样的,只不过斐波那契数列看起来复杂一点,实际上在最后一次函数调用建立栈帧结束要返回的时候,栈帧会销毁,紧接着下一次函数调用建立栈帧就会在这次销毁的地方建立并且复用,还理解不了的话就理解成空间是重复利用的就行,开辟的深度都是N层所以空间复杂度是O(N)二分查找的思想更简单了,每次找一半,最坏找到我们要查的数字时刚好结束,也就是2^x=N,x是次数,N是要查数据总个数,x=logN(注意)logN本质上是。

2025-01-17 18:18:18 1246 13

原创 动态内存管理

我们已经掌握的内存开辟方式有://在栈空间上开辟四个字节//在栈空间上开辟10个字节的连续空间但是上述的开辟空间的方式有两个特点:1. 空间开辟大小是固定的。2. 数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道,那数组的编译时开辟空间的方式就不能满足了。这时候就只能试试动态存开辟了。(没办法满足动态需求)

2025-01-16 19:34:59 2418 20

原创 自定义类型:结构体,枚举,联合

假设我们已知结构体S3大小是16,c1默认放0偏移处,S3是结构体,要遵循嵌套结构体对其原则,对齐在(最大对齐数8)的整数倍就是8偏移处,还剩一个d,对齐数是8,8*3=24,刚好可以放在24偏移处,最后算出来结构体总大小32,也符合最大对齐数8的整数倍(注意,嵌套结构体时计算的最大对齐数是包含嵌套结构体自身成员的)然后结构体总大小要最大对齐数整数倍(最大对齐数是该结构体成员的对齐数的最大的值-》),看到最大对齐数是4,4*3=12,所以要浪费3个格子,结果是12.在声明结构的时候,可以不完全的声明。

2025-01-15 21:16:05 1214 11

原创 字符串函数和内存函数

介绍一个很牛逼的网站cplusplus,c++的官方库,可以查到99%你在c++遇到的函数(注意我们用这些字符串函数时,可以进入C库-C++参考)这个网站上查询函数,可以看到官方库的函数是怎么个意思,很有价值,比在网上随便搜的正确性要高,不仅可以看到返回值,参数,还有使用场景等等,都可以看。用什么函数就搜什么函数就行,很方便注意我们用这些库函数的时候一定要包含头文件,比如strlen的头文件是string.h,大部分字符串函数都是这个头文件。

2025-01-14 15:34:02 1269 20

原创 指针的进阶

如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。1. sizeof(数组名),这里的数组名不是数组首元素的地址,数组名表示整个数组,sizeof(数组名)计算的是整个数组的大小,单位是字节。数组名是数组首元素的地址,arr[1]拿到的是arr1数组名,再使用下标就能访问数组的元素,很简单。2. &数组名,这里的数组名表示整个数组, &数组名取出的是整个数组的地址。是指针,指针指向的是一个函数,指向的函数无参数,返回值类型为void。

2025-01-13 22:44:54 2498 12

原创 数据在内存的存储

在vs上我们认为没有unsigned就是有符号类型,有unsigned就是无符号类型,有符号类型第一位存储符号位(整数是0,负数是1),无符号类型每一位都是数值位,一个字节等于8比特位,具体的计算过程上图很明显了(注意:有符号类型第一位符号位不参与计算,只算数值位,所以相对无符号类型的最大值会小一半)先算出补码,后截断,再根据类型整型提升,最后打印(以有符号打印需要看最高位,是1说明是负数,需要转化为原码,是0直接打印,以无符号打印直接补码就是原码,所有位都是数值位并且计算)

2025-01-12 22:55:33 1320 20

原创 c++入门

定义命名空间,需要使用到。

2025-01-10 20:10:36 1098 14

原创 程序环境及预处理

程序执行的过程:1. 程序必须载入内存中。在有操作系统的环境中:一般这个由操作系统完成。在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。2. 程序的执行便开始。接着便调用main函数。3. 开始执行程序代码。这个时候程序将使用一个运行时堆栈(stack)(函数栈帧),存储函数的局部变量和返回地址。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。4. 终止程序。正常终止main函数;也有可能是意外终止。

2025-01-07 11:53:36 1289 26

原创 c语言文件操作

我们前面学习结构体时,写了通讯录的程序,当通讯录运行起来的时候,可以给通讯录中增加、删除数据,此时数据是存放在内存中,当程序退出的时候,通讯录中的数据自然就不存在了,等下次运行通讯录程序的时候,数据又得重新录入,如果使用这样的通讯录就很难受。每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。指向某个文件的文件信息区(是一个结构体变量)。文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,

2025-01-04 16:46:59 2221 9

原创 模版的初步

在编译器编译阶段,对于模板函数的使用,编译器需要根据传入的实参类型来推演生成对应类型的函数以供调用。比如:当用double类型使用函数模板时,编译器通过对实参类型的推演,将T确定为double类型,然后产生一份专门处理double类型的代码,对于字符类型也是如此。

2024-12-24 20:27:51 561

原创 内存管理(new和delete)

3. malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可,如果是多个对象,[]中指定对象个数即可。4. malloc的返回值为void*, 在使用时必须强转,new不需要,因为new后跟的是空间的类型。5. malloc申请空间失败时,返回的是NULL,因此使用时必须判空,new不需要,但是new需。1. malloc和free是函数,new和delete是操作符。2. malloc申请的空间不会初始化,new可以初始化。

2024-12-24 17:14:53 381

空空如也

空空如也

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

TA关注的人

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