自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux-make/makefile工具

一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作makefile带来的好处就是————,一旦写好,只需要一个make指令,整个工程完全自动编译,极大的提高了软件开发的效率,两个搭配使用,完成项目自动化构建。

2025-07-02 16:58:28 936

原创 Linux权限

大家可以看到,我们创立的这个共享文件,一个人在这个目录里面创立文件,另一个人居然可以删掉它,我们试想着是否可以关闭这个目录的写权限,让它做到无法更改和删除呢。一件事情是否允许被你做,取决于你的身份是什么,比如你是学生你就不允许参与政府的管理,还取决于事务的属性是什么,比如一个面包,它不可能拿去当书读。我不属于这个文件的拥有者了,我自然不能更改它的权限,但是我还是它的所属组,还是可以拥有读写执行权限的,前提是拥有者给你开放。:更改文件或目录的所属组,使不同组的用户可以根据新的组权限对文件或目录进行操作。

2025-06-01 10:44:09 928

原创 Linux基本指令

前提说明:指令本质就是–可执行文件指令一定是在系统的某一个位置存在的在执行指令之前,我们会现在系统中查找对应的指令指令就是安装到了系统的某种路径下。

2025-05-31 10:55:28 876

原创 C++单例模式

比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。2.但是如果我们单单只创建在类外面的全局对象是无法访问类里面的私有成员的,所以我们要在类里面创建,但是类里面又不能直接创建,因为还没有A这个类呢怎么可以就初始化了呢,所以我们要定义成静态的。3.但是这个类其实是存在线程安全问题的,就是你两个线程同时进来就会创建两个类,所以我们就要给它加一个锁。

2025-05-24 17:24:31 1028

原创 C++类型转换

向上转换是天然的,不需要做什么特殊的处理,子类转成父类,就是把子类当中父类的那一部分赋值给父类或者子类当中父类的那一部分取别名,如果要转换的话,像下面那种转换就会产生临时变量,临时变量具有常性所以要加const,但是子类转成父类中间不会产生临时变量,所以是天然的,不需要转换的。如果像这样直接转换是不安全的,就是你传的是一个父类指针,你转回子类的指针,你就会多看到子类的那一部分,不是你的那一部分你去访问就是一个越界问题了。有一定的关联,但是意义不相似的类型用reinterpret_cast。

2025-05-24 10:55:09 761

原创 C++智能指针

智能指针就到这里写完了,智能指针是非常实用的一种思想,在以后的泛用性非常强,希望能够对大家有所帮助。

2025-05-11 16:47:53 1084

原创 C++异常

这个就是平常公司里面服务器开发大家都规范一个用派生类对象,用基类去捕获public:, _id(id)protected:// 错误描述int _id;// 错误编号public:return str;return str;private:throw SqlException("权限不足", 100, "select * from name = '张三'")

2025-05-10 16:46:04 808

原创 C++11

右值也是一个表示数据的表达式,如:表达式返回值,函数返回值等等,

2025-05-10 14:17:56 1191

原创 C++哈希

1.当我们查找的时候,是不能全部初始化成-1的,万一你要存的是-1呢,我们可以存状态,但是状态我们把333删除的时候,如果标记为空,find时候是到空就结束了,但是我们是要把冲突的位置以及向后的位置都找一遍,所以删除我们也要是一种状态。开新空间,重新映射,再释放旧空间,这里我们复用了插入的这个逻辑,避免代码冗余,因为新表的这个数据就是我们想要的,我们直接交换一下就好了,而且newHT是局部变量,出了作用域会调用vector的析构函数自动释放。

2025-05-03 17:48:04 908

原创 map和set封装

创作中心-CSDN。

2025-04-21 23:23:12 717

原创 C++红黑树

如果我们要继续更改父亲变成黑色的话,黑色节点就无法控制了,就是你把f变黑,凭空多出一个黑色节点,用g变红来抵消,但是u的路径上就少了一个黑色节点,但是u本身也是黑色节点无法改变,这时候我们也仔细看一下最长路径已经超过最短路径的2倍了,所以我们要旋转+变色。我们看新增一个红色节点,如果父亲是红色的,那违反规则我们就把它变黑色,但是这条路径多了一个黑色节点,我们要减少一个黑色节点,把6变红,但是6的左边少了一个黑色节点,所有我们把5变黑,这只是最简单的一种情况。

2025-04-15 18:14:25 989

原创 AVL搜索树

新增节点在左子树,父亲bf--;新增节点在右子树,父亲bf++

2025-04-13 18:26:03 1032

原创 搜索二叉树

这时候我们父亲就解决不了问题了,但是我们可以找一个保姆,把这两个孩子管理起来,那么这个保姆谁来当呢 ,要找那种无牵挂的,且替换完满足搜索二叉树的。1.比它小就往左走,比它大就往右走,和它相等就返回假,走到结尾的时候发现不能链接上上一个节点,所以我们要记录一个parent来链接;如果这里删除的是9,parent恰好没有进入循环,就会发现parent空指针的问题,如果我们加是根的判断的话,那么。我们这里如果不用引用的话root置空我们形参的改变是不影响实参的,用引用就可以在原基础上删除了;

2025-03-30 11:16:03 568

原创 C++多态

两个函数分别在基类和派生类的作用域函数名相同两个基类和派生类的同名函数不构成重写就是重定义。

2025-03-23 10:38:41 836

原创 C++继承

继承是把父类的继承下来一份,自己有一份,这个继承下来的只有使用权,因为静态成员变量储存在静态区,你继承下来的也不是你的,和成员函数一样,成员函数存在公共代码区,突破类域就能拿到,就是它放在父类的类域里面,你只有使用权,不能把它拿过来。父类和子类有独立的作用域,两个类里面都可以有相同的变量,就想你爸爸有一个游戏机,我继承下来我也可以再有一个,那么访问的选择的是谁呢,根据就近原则,有自己的肯定先选择自己的。继承的权限比较大,父类的公有子类可以访问,父类的保护子类也可以访问,但是组合就不能访问保护,

2025-03-16 11:42:28 633

原创 C+模板进阶

优点:模板复用了代码,节省资源,更快的迭代开发增强了代码的灵活性缺陷模板会导致代码膨胀问题,也会导致编译时间变长出现模板编译错误时,错误信息非常凌乱,不易定位错误模板进阶就到这里结束了接下来进入继承,写的不好的地方欢迎大家指出。

2025-03-15 09:58:30 897

原创 优先级队列的模拟实现和仿函数

container看不懂的可以去看我上一篇文章,优先级队列其实就是容器适配器,它根据不同的容器对数据内容进行调整,但是这里最合适的缺省参数就是vector。这就是建堆并且向上调整的一个过程,交换完以后父亲给给孩子,孩子变成父亲的位置,再和上一个父亲进行判断,下面也是类似的道理。我们会发现结果都是不一样的,因为这是地址地址的大小是不固定的,那怎么办呢,我们可以实现单独一个仿函数来针对这种类型。这就是删除的一个过程,其中我们要注意的是右孩子的叶子节点是不能够越界的。这就是仿函数可以根据我们的需求来灵活变化。

2025-03-09 10:33:53 395

原创 list的模拟实现

有了前面vetcor的基础呢,我们在学习和使用list上就更加的方便快捷,浅显易懂了,所以相似的部分我就不做过多的言语阐述了,在使用方面呢,大家可以学习我之前看的c++网站,和vector和string的使用都是差不多的,重点要放在list的迭代器部分。

2025-03-02 14:17:00 920

原创 vector的模拟实现

我们pos在移动的过程中倘若空间不够发生了扩容,其他的变量都移到新空间去了,但是pos随着旧空间一起释放掉了,所以我们的pos也要随着新空间的改变而改变 ,还要记录下原本空间pos相对于start的相对位置。这里的it也会失效,因为it是传值pos的改变不会影响it ,所以我们认为insert插入后it就失效了,不能访问,有人说引用可不可以,库里面是没有的。比如说你v1=v3,this就是v1,tmp就是v3的拷贝,你把自己的丢给tmp,把v3里面要的东西拿过来,顺便让tmp帮自己释放一下。

2025-02-23 18:33:59 1025

原创 vector的认识和使用

这个find是模板就是所有的容器都可以使用,但是不适配string,string又有字符串又有字符,其中有牵涉到子串匹配等等系列问题,也有一部分出现的早的原因,总的来说find是按迭代器区间来寻找的我们只要知道用就可以了。这个接口是一种把时间换空间的一种接口,就是你的size本来有50,capacity有100,就把你的capacity缩成和size一样的大小,而且一般是异地缩,这个接口我们一般就不要用了。v4在初始化的时候就涉及到隐式类型的转换,因为它本身类型是不匹配的,其他和string都是类似的。

2025-02-22 11:09:48 627

原创 string的模拟实现

补充一下:const的静态的整型成员变量可以给缺省值,上一篇文章讲到const 静态成员不能给缺省值,因为它不走初始化列表,属于全局,所以要在类外初始化,但是C++就设计了这个可以,这是开了一个特例,换成double都不可以。这么改就好了,不能给空指针,给空指针size就崩了,为什么不是‘\0’呢,一个是char一个是char*类型都不匹配,改成这样的常量字符串就好了,也不要多加‘\0’多加就会有两个了。这个代码其实是有问题的,因为这里是浅拷贝传值返回,然后被析构就没了,再去赋值给别人的话就会出问题。

2024-12-30 21:01:09 702

原创 String的认识和使用

这两个其实是没有区别的,因为string其实出现的比stl要早,最早开始就叫length,但是后面stl出来了,为了迎合大众需求,因为大家都用size,所以string也添加了size。这是类比C语言中strcat的知识,strcat只管把那个字符串拷贝到另一个字符后面,空间不够得自己开好,而且找'\0'也会耗时间,string就很好的解决了这个问题。一般的编译器都是不会缩了,有些编译器可能会缩,那要是缩是怎么缩呢,比如我有一块100的空间,内容是50,那么我一般都会缩到50,这个一般都是异地缩。

2024-12-28 16:16:33 918

原创 C++内存管理与模板

6.申请自定义类型对象时,malloc,free只会开辟空间,不会调用构造函数与析构函数,而new再申请空间后会调用构造函数完成对象的初始化,delete在释放空间前会调用析构函数完成空间中资源的清理。因为编译器去调析构函数,然后这个析构函数又没做什么事情,所以认为不去调用其实也行,然后返回的就是p2,然后这里用delete就是对的。3.malloc申请空间是,需要手动计算空间大小并传递,new只需再其后跟上空间的类型即可,如果是多个对象,[]中指定对象个数既可。所有它把它们封装起来,再抛异常。

2024-12-22 16:59:11 983

原创 类和对象下

1.每个成员在初始化列表中只能出现一次2.类中包含一下成员必须放在初始化列表位置进行初始化引用成员变量 const成员变量 自定义类型成员(且该类没有默认构造函数时)3.

2024-12-15 16:21:35 687

原创 类和对象中

严格一点需要是加const。

2024-12-12 23:48:01 933

原创 类和对象上

C++兼容C语言,结构用法可以继续使用。

2024-12-10 22:34:59 831

原创 C++入门终

接下来我们看引用完优化的代码。有人会觉得f会不会跟别的文件里面的重合呢,就是我这个.cpp文件里面有,另一个.cpp文件里面也有,合并的时候会不会展开冲突,是不会的,因为它不生成指令,它在调用的地方就展开了;这段代码是过不去的,为什么呢,举个例子,你是一个囚犯,你可以在你所在的范围内运动,但是给你取了一个别名的时候你就不是这个囚犯了吗,你就可以自由运动了吗。我们都知道指针是开空间的,但是引用开不开空间呢,引用从语法上讲是不开空间的,但从下层来看,我们通过上面的对比上可以看到,其实引用的本质就是指针。

2024-12-08 00:00:41 799

原创 C++入门一

库里面的会尽量和你避免起冲突,大不了就是换一个变量,但是当你和别人共事的时候发现变量起冲突就麻烦了所以C++在这里设置了一个叫命名空间的东西。

2024-12-04 00:11:44 754

原创 自定义类型:枚举和联合

举例:比如,我们要搞一个活动,要上线一个礼品兑换单,礼品兑换单中有三种商品:图书,杯子,衬衫,每一种商品都有;联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)我们给其中的某一个或者多个赋值,枚举常量的值发生改变,给某一个赋值的话,往下还是递增1。像结构体一样,联合体也是由一个或者多个成员构成,这些成员可以是不同的类型。衬衫:库存量,价格,商品类型,设计,可选颜色,可选尺寸。图书:库存量,价格,商品类型,书名,作者,页数。

2024-09-24 14:22:32 591 1

原创 自定义类型:结构体

1.位段的成员必须是int、unsigned int或signed int,在C99中位段成员的类型也可以选择其他类型2.位段的成员名后面有一个冒号和一个数字比如。

2024-09-22 14:28:31 609

原创 数据在内存中的存储

如果E为11位,它的取值范围为0-2047.但是我们知道,科学计数法中的E是可以出现负数的,所以IEEE754规定,存入内存时E的真实值必须再加上一个中间数,对于8位的E,这个中间数时127,对于11位的E这个中间数时1023.比如2的10次方的E时10.所以保存成32位浮点数时,必须保存成10+127=137,即10001001。这时,浮点数的指数等于1-127或者1-1023即为真实值,有效数字M不在加上第一位的1,而是还原为0.xxxxx的小数,这样做是为了表示±0,以及接近0的很小的数字。

2024-09-21 13:15:06 902

原创 C语言内存函数

这里我们引入数组的概念来理解我们会发现,当destsrc的时候是从后往前遍历的 ,根据这个我们就可以来编写程序了。像这种情况我们不难发现不管是从前往后遍历或者是从后往前遍历都是可以的,但是为了方便我们编写程序我们采用了从后往前遍历的统一格式。原因是3的位置上拿了个1,4的位置上拿了个2,5再想拿3的位置上的时候结果出现了1就会出现这样循环往复的情况。memset是用来设置内存的,将内存中的值。mem——memmory——记忆——内存。memset——内存设置。

2024-09-17 15:15:10 636

原创 字符函数与字符串函数

C语言中有一系列的函数是专门做字符分类的,也就是一个字符是属于什么类型的字符的,这些函数的使用都需要包括一个头文件是 ctype.h我们举例islower来说明,检查字符是否为小写字母,字符的本质和整型一样是ASCII码值那返回值是int是什么意思呢这句话的意思是如果c是一个小写字符的话就返回非0的数字,不是的话则返回00也不是小写字母我们再举例isdigit isdigit是判断十进制数字‘0’~‘9’的字符很显然不是十进制的数字字符,所以返回值为0。

2024-09-16 11:09:56 892

原创 冒泡函数模拟qsort函数

这里为什么用到的是char*呢因为char字符在编译器中属于一个字节,属于是最小的字节,我们方便得到,比如8个字节或者4个字节大小的元素,我们通过width字节大小的操作就能不断的得到下面几个元素。因为我们是通用的,我们在编写代码的时候就需要对所有的字节进行交换,而对字节里的实际内容交换又需要用到指针。如果返回数大于0,我们就进行交换,但是我们要适用于所有函数所以我们要单独剥离一个函数出来。我们冒泡排序模仿qsort必须要针对的是所以说我们要模仿qsort的底层逻辑来写。qsort的底层逻辑是这样的。

2024-06-05 11:09:08 1592

原创 指针的详解终章

第一篇移步CSDN第二篇移步CSDN​​​​第三篇移步CSDN。

2024-06-02 16:36:50 990

原创 指针的详解延续二

第一篇移步CSDN第二篇移步。

2024-06-01 23:28:38 2081

原创 指针的详解延续一

第一篇请看。

2024-05-31 12:30:39 1082

原创 指针的详解

本文的内容全靠自己理解,用于梳理一遍自己的知识,如果有写的不对的地方,或者是不好的地方请大家积极指出。

2024-05-30 16:52:40 2212

原创 杨氏矩阵的详解

有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。要求:时间复杂度小于O(N);

2024-05-23 18:36:24 288

原创 左旋字符串的三种方法

两种代码的的头文件都是<string.h>3.第三种方法我称之为奇思妙想法。2.第二种方法我取名叫作函数法。这个大家可以仔细看一下。1.我取名叫作移位法。

2024-05-23 13:47:48 309

空空如也

空空如也

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

TA关注的人

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