自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 双指针(更新中)

我们可以在图中看到,这个过程就是以一个值为起点,向后或者向下进行比较的结果,(最大的组合加粗)但是它只能保证这次比较的结果中它是最大,所以还需要和它之前的小组中最大值值进行比较。因为开始的时候startpos为0,endpos为-1,因此遍历结束时,startpos指向的是真正开始遍历的位置的下标+1.因此startpos--;因为有可能出现最后一位的值为0,但是所剩余的空格只有1,endpos+2后会出现越界,因此我们要进行判断,如果越界那么我们先进行处理。判断函数(i, j,k)

2024-07-22 23:32:05 555

原创 c++模板初识

class 类模板名// 类内成员定义/ 动态顺序表// 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public :, _size(0){}// 使用析构函数演示:在类中声明,在类外定义。~Vector();// 注意:类模板中函数放在类外进行定义时,需要加模板参数列表if(_pData)

2024-07-20 12:32:44 646 3

原创 C/C++内存管理

但是new和delete最重要的功能还是用来处理自定义类型,malloc无法很好支持动态申请的自定义对象的初始化class Apublic:: _a(a)_a = a;int main()//自定义类型,开空间+调用构造函数初始化//自定义类型,调用析构函数+释放空间delete p2;delete p3;//也支持一次定义多个对象//多个对象的初始化1. A a1(1);A a2(2);2. //使用匿名对象。

2024-07-20 10:10:05 618

原创 类和对象(下)

目录一、再谈构造1.初始化列表2.c++11中,可以在声明的时候给缺省值3.构造的优化现象4.c++11支持多参数的隐式类型转换5.explicit可以禁止隐式类型转换6.匿名对象二、static成员三、四、友元1.友元函数2.友元类五、内部类一、再谈构造1.初始化列表初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。class Date{

2024-07-19 09:28:46 845

原创 类和对象(中)

我们_array是通过malloc开辟空间的,这时候我们发现,传参的时候s仅仅只是将s1中_array变量中储存的地址拿了过去,只是将main栈帧里面存的东西原模原样复制到func2栈帧中而已,他们的_array中存的都是指向堆区的同一块空间的指针。2.不会处理内置类型的成员,例如int double...,是随机值,所有指针,包括自定义类型的指针也都是内置类型,一般会初始化为nullptr。注意,全缺省的函数与无参的函数,在语法上构成函数重载,但是在实际调用时会产生错误,因为编译器不知道调用哪一个。

2024-07-14 23:52:50 965 1

原创 类和对象(上)

但是c++中更喜欢使用class,主要原因在4.访问限定符中讲// 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。类的两种定义方式:1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器会将其当成内联函数处理。

2024-07-12 23:01:16 882 1

原创 进程的等待

之前讲过,子进程退出,父进程如果不管不顾,就可能造成‘僵尸进程’的问题,进而造成内存泄漏。另外,进程一旦变成僵尸状态,kill -9 也无法再处理僵尸进程,因为谁也没有办法杀死一个已经死去的进程。最后,父进程派给子进程的任务完成的如何,我们需要知道。如,子进程运行完成,是否正常退出,如果正常退出结果对还是不对父进程通过进程等待的方式,回收子进程资源,获取子进程退出信息。

2024-07-11 15:10:09 563 7

原创 基础贪心算法集合(更新到20加油站)

贪心的点在于,如果是I,即这个数到下个数要增长,那么我们选取当前最小的那个数,可以使得出现增长的情况数目最多,同样,当我们判断到D,我们选取最大的那个数,可以使得出现减少的情况数目最多。这个数组的作用是记录最大的序列长度,比如说长度为1的序列末位置为2,4无法接在2后面,但是先前已经储存了接在3后面的序列了,就不需要担心序列长度丢失问题。2.n < k 先把数组中全部负数转换成正数,然后再计算k - n的值,如果为偶数,那么取正与取反抵消,如果为奇数,那么我们将最小的那个数取反即可。

2024-07-10 23:46:32 889

原创 基础动态规划算法集合(更新到22.乘积为正整数的最长子数组长度)

这里主要思路还是和19一样,分成* 两种********************但是如果nums[i]为负数,那么乘以一个大数反而变小了,因此需要分成nums[i]大于等于和小于0两种情况,两个dp表一个存最大值一个存最小值public:i

2024-07-10 10:35:20 988

原创 进程的控制

因此进程的退出码可以被它的父进程拿到,可以通过 echo $?由此通过errno变量我们可以知道库函数调用失败的错误码,也可以通过strerror打印错误原因,还可以将错误码转化为进程的退出码。在fork之后,页表中所有进程地址的标志位都变成只读,看后续谁先触发只读权限的错误就给谁进行写时拷贝,并且修改权限为可读可写。通常,父子代码共享,父子再不写入时,数据也是共享的,当任意一方试图写入,便以写时拷贝的方式拷贝一份副本。我们这个main函数return的是进程的退出码,来表征进程的运行结果是否正确。

2024-07-09 21:34:49 1214

原创 进程地址空间(初)

task_struct中存有页表的起始地址,cpu中有一个cr3寄存器可以储存该进程的页表信息,(页表信息也属于上下文),因此当需要访问内存的时候,cpu可以通过cr3寄存器找到该进程的页表,再通过虚拟地址去找到物理地址。2.增加进程虚拟地址空间可以让我们访问内存的时候,增加一个转换的过程,在这个转化的过程中,可以对我们的寻址请求进行审查,所以一旦异常访问,它会被直接拦截,该请求不会到达物理内存,可以起到。当我们要访问内存时,我们先找到虚拟地址,再看其标志位,当标志位为1,那么我们直接访问对应的物理内存。

2024-07-09 10:16:03 1115

原创 进程切换与环境变量(一)

环境变量是一组name=vaule形式的变量,不同的用户具有不同的环境变量,环境变量具有全局性它的作用是帮助系统“认识你是谁”

2024-07-08 09:46:54 700

原创 进程的初步认识

abcde都是独立的个体,所以各个单元必须要用“线”连接起来,称为总线,为图中红色1.系统总线 连接运算器和控制器2.io总线 连接存储器和输入输出设备一个程序要运行必须先加载到内存,是因为冯诺依曼体系就是这样子规定的计算机管理硬件1. 描述起来,用struct结构体2. 组织起来,用链表或其他高效的数据结构。

2024-07-06 18:37:03 1149

原创 linux中的调试工具gdb

3. list(简写为l)行号:显示binFile源代码,接着上次的位置往下列,每次列10行。如果后面添加行号,它会将行号所在的语句放在显示出来的代码的较为中间部分,所有当我们l 0时,因为前面没有代码了,所有效果就等效于从第一行开始显示10行。gdb会记忆上一次进行的操作,比如我使用 s,按回车键就会继续产生按s的效果,如果我们先输入了一个 l 0,继续按回车就会产生继续按l的效果。12print(简写为p):打印表达式的值,通过表达式可以修改变量的值或者调用函数p 变量:打印变量值。

2024-06-24 17:27:54 821 1

原创 linux上git的使用

如果输入git --help 会显示下面一大串那么就是已经安装,否则需要自行手动安装。

2024-06-24 14:32:36 487

原创 linux下进度条的实现

使用模块化编程。

2024-06-24 12:37:06 459

原创 make与makefile

值得注意的是因为修改文件内容时,绝大多数时候文件的大小都会改变,因此modify改变大部分情况change也都会改变,而修改文件属性时则不会改变modify。假设这是一个makefile文件,make的时候默认生成第一行的目标文件 ,make会自动推导makefile中的依赖关系,推导过程是一个栈式结构。change是文件属性被修改的最近一次时间,包括文件名,文件大小,文件创建日期,文件的权限等等。因为一定是先有源文件再有可执行文件的,所以一般而言,源文件的最早修改时间是要比可执行文件早的。

2024-06-22 01:06:15 935 4

原创 Linux开发工具

实质上头文件包含的是方法的声明,而方法的实现在库中,库其实就是把源文件(.c)进行一定的翻译,然后打包,只提供我们一个文件,不提供太多的源文件,而且也可以起到隐藏源文件的效果。动态库因为是共享库,可以有效节省资源,(磁盘空间,内存空间,网络空间等),动态库一旦缺失,会导致与它链接的各个程序都无法运行。如果我们没有动态库,只有静态库,gcc还是能找到静态库进行静态链接的,-static的本质是改变调用库的优先级。在编译器使用动态库进行动态链接的时候,会进行跳转,跳转到库中执行,再返回我们的代码调用处。

2024-06-20 23:03:31 1038 4

原创 Linux工具(包含sudo提权与vim快捷配置)

在Linux下安装软件1.源代码安装,下载到程序的源代码, 并进行编译, 得到可执行程序2.rpm安装 Linux安装包但是这两种方法太过于麻烦,因此我们使用yum3.yum安装 解决安装源,安装版本,安装依赖(相关联的插件什么的都会一并装了,不需要我们担心)

2024-06-19 21:26:54 1307 10

原创 Linux权限

如果我们想要暂时对一条命令进行权限的提升可以使用 sudo 指令, 可以暂时使用root身份来调用这条指令,比如说我们使用 sudo whoami 那么会输出root,不过用户要实现存在于系统的信任白名单中。linux中,每个人的身份只能被唯一识别,比如说如果用户a既是拥有者,也是所属组,系统会优先认定其为拥有者,如果文件的属性是r--rw-r--,那么该用户是不能写该文件的。如果我们需要共享文件,需要我们在里面可以创建自己的文件,进行增删查改,但是不能删除他人文件,我们可以增加粘滞位。

2024-06-18 23:19:51 640

原创 Linux基本指令

文件的类型d:是一个目录-:文件是一个普通文件在Linux中,以.开头的文件称为隐藏文件,任何一个目录下面都有两个隐藏文件.. :表示当前路径的上层路径.:表示当前路径,其存在意义是帮助用户定位当前目录下的一个文件常用选项(选项可以多个叠加使用)如 ls -a -d1. -a列出目录下的所有文件,包括以.开头的隐藏文件2.-d将目录像文件一样展示,而不是显示其下的文件, 如ls -d 指定目录3.-l 列出文件的详细信息。

2024-06-14 14:57:06 957

原创 List的几个小点

3.sort//list只能用自己的sort,因为list是bidirectional iterator,而sort要求RandomAccessIterator。4.merge(用的比较少)二、operations。

2024-06-01 09:29:35 167

原创 Vector的小部分常用接口

vector默认遍历的时候下标要小于它的size,即使开了空间,也无法强行访问。stl中的内容具有很强的统一性,所以其它可以参照string。vector可以理解成一个能够动态增加的数组,也即顺序表。三、insert,erase,和find。

2024-05-31 16:26:05 163

原创 string类简略讲解

但是如果是使用流插入打印,那么打印出来的内容是按照size打印,如果使用c_str(),即使用const char *打印,那么会受到'\0'的影响。可以理解成一个像指针的东西,str.begin()理解成取str[0]的地址,str.end()则是取字符串最后一位后面的那个位置的地址。(这个类里面还有cbegin(),cend(),crebegin(),crend())来区分普通和const修饰的类型,但是使用不广泛。如果我们知道要开多少空间,我们可以提前开好空间,减少扩容,扩容所产生的消耗太大了。

2024-05-27 17:20:16 683

原创 C++入门基础知识

这两个函数属于传值返回。另外,指针进行初始化和赋值以及引用进行初始化的时候,权限可以缩小,但是不能放大,因为对于指针来说,两个变量里的指针指向的是同一块空间,而对于引用来说,一个变量改变可以直接影响另一个。auto在同一行声明多个变量时,这些变量必须要类型相同,否则编译器会报错,因为编译器实际上只对第一个类型进行推导,然后用推导出来的类型定义其它变量。内联函数也不建立栈帧,但是在默认的debug版本不起作用,因为那样就不能调试了,release下会起作用,编译的时候会在调用内联函数的地方展开。

2024-05-20 15:19:15 703 2

原创 c语言版简易贪吃蛇

【代码】c语言版简易贪吃蛇。

2024-02-26 12:46:44 186 1

原创 基础扫雷游戏的实现#新人向

这个扫雷游戏目前是属于9*9有10个雷的模式,需要一个一个方块排除,后续等待技术提升还会再做优化。2.game.h函数声明,头文件应用和定义。3.game.c游戏内容的分块实现。模块化,使得代码更加清晰。

2023-12-26 18:03:24 417 1

原创 猜数字游戏(纯代码)//第一版

else if(x < m)printf("猜小了\n");if(x > m)printf("猜大了\n");printf("**

2023-12-24 18:29:36 456

原创 gitte打卡帖

不定时更新,大家也可以在评论区一起打卡共勉!!!

2023-12-24 18:11:15 383 1

原创 分支结构以及switch中需要注意的点

整形表达式包括 整型int, 长整型long(int),长长整形 long long(int) ,短整形short,而因为字符串char类型,在内存中的存储实际上是其阿斯克码的值,所以也属于整型。default语句相当于if- else分支中的else语句,一个switch语句中只能有一个default语句,后面不需要跟随表达式。switch分支中,由某个表达式进入对应的case语句,执行相应的语句,并且会一直执行到结束,因此一般使用时会在语句中加入break退出。printf("输入错误\n");

2023-12-24 17:58:27 406

空空如也

空空如也

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

TA关注的人

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