自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++】继承

C++这种面向对象的语言有三个特点:封装、继承和多态。我们这里对封装的特点做一下总结:封装有两层特点:1.数据和方法放到一起,把想给外面访问的定义成公有,不想给外面访问的定义成保护;2.一个类型放到另一个类型里面,通过typedef和成员函数调整,封装另一个全新的类型继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。

2024-04-29 10:05:53 1067 9

原创 【C++】模版进阶

一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。【优点】1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性【缺陷】1. 模板会导致代码膨胀问题,也会导致编译时间变长2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误。

2024-04-23 17:15:22 889 15

原创 【C++】STL--stack&quene

1.stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。2.stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。3.stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:empty:判空操作back:获取尾部元素操作push_back:尾部插入元素操作。

2024-04-11 19:48:56 723 16

原创 【C++】STL--list

1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3.与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。

2024-04-08 14:50:21 520 19

原创 【C++】STL--vector

C++中,vector是一个模版,第一个参数是类型T,第二个参数暂且不考虑。我们可以通过上面这句代码将参数T给成int,那么vector中所包含的元素就是int。(重点)1.vector()无参构造(重点)2.vector (const vector& x)拷贝构造构造并初始化n个val使用迭代器进行初始化构造。

2024-04-06 15:09:30 1167 12

原创 【Linux】第二个小程序--简易shell

使用‘ ’(空格)作为分隔符,我们想要得到一个数组,这个数组叫做char *argv[],对于这样“ls -l -a”一个字符串,定义指针指向第一个‘l’,再定义另一个指针也指向第一个‘l’,往后遍历,遇到第一个空格把其置为‘\0’,把指向第一个‘l’的指针放到agrv数组的第一个位置,然后指针往后走,指向‘-’,再定义一个指针向后走,遇到第一个空格把其置为‘\0’,把指向第一个‘-’的指针放到agrv数组的第二个位置,依次类推。所以,我们也需要构建一个类似的命令行,首先,创建一个myshell.c,

2024-04-04 22:19:36 734

原创 【Linux】进程控制

这篇博客主要记录进程创建、进程终止、进程等待、获取子进程状态、进程替换相关知识。

2024-04-02 16:31:24 1361 10

原创 【Linux】进程

那么今天我们有一个需求:我想执行我们的命令,和系统指令一样,怎么做呢?我们可以简单粗暴地把我们命令拷贝到PATH环境变量中,其实,这就相当于我们把myprocess安装到系统里,但是。

2024-03-22 11:40:25 1005 23

原创 【C++】STL--String

可以用。

2024-03-14 09:37:25 1153 23

原创 【Linux】第一个小程序--进度条

这篇博客要综合利用以前的知识,来实现一个进度条程序~

2024-03-08 09:21:15 1967 19

原创 【C++】模版初阶

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

2024-02-14 14:08:36 1287 22

原创 【C++】C/C++内存管理

int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;free(p5);//定义自定义类型的数组delete p7;return 0;

2024-02-08 14:05:42 1020 12

原创 【C++】类和对象(3)

内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。关于内部类是一个独立的类,它不属于外部类这句话,我们来验证一下:A类大小是8,而不是12,因此,B不属于外部类。

2024-02-07 09:20:36 1163 22

原创 【C++】类和对象(2)

默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝。

2024-02-05 08:59:18 1135 15

原创 【C++】类和对象(1)

/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。类的两种定义方式1. 声明和定义全部放在类体中成员函数名前需要加类名::更推荐采用第二种定义方式!class Datepublic:// 这里的year到底是成员变量,还是函数形参?

2024-02-01 11:17:10 1254 20

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

上篇博客我们学习了Linux权限相关知识,那么这节课我们来学习一下Linux环境基础开发工具使用吧~,主要包括yum、vim、gcc/g++的使用,以及Linux项目自动化构建工具。

2024-01-30 15:40:32 1254 14

原创 【C++】入门

C++入门

2024-01-26 16:01:57 1130 17

原创 【Linux】解决普通用户无法进行sudo提权

这个图中有一个细节,我们使用sudo进行提权的时候,用的可是zhangsan的密码,因此有人可能会有疑问,这不是有问题吗?我竟然可以用自己的密码就可以用root的身份创建文件,很离谱啊!那么,如何被root信任呢?在/etc/sudoers这个路径下有sudoers这个文本文件,只有把这个用户信息添加到这个文本文件中,这个用户才是可被信任的,那么,然后复制一行这里的信息,粘贴到这里,只改名字为zhangsan,其他什么也不需要改,保存退出文件就行。但是退出时,会提示这样的信息,需要使用wq!

2024-01-22 18:01:27 699 12

原创 【Linux】浅谈批量化注释和批量化去注释

Linux中注释与去注释

2024-01-21 11:40:33 572 20

原创 Linux权限

权限,就是通过一定的条件,拦住一部分人,给另一部分人权利,来访问某种资源。(可以类比为vip或门禁)

2024-01-18 19:39:12 1095 13

原创 数据结构-排序

(适应性强)。

2024-01-16 09:00:55 1052 14

原创 数据结构-二叉树

这个接口中,除了最后三行外,上面的几行都是用来判断堆容量是否充足,如果不充足,那么扩充空间。层序遍历的思想是,先把二叉树第一层结点的指针压入栈中,用front记录栈顶元素,然后pop出栈顶元素,再用之前记录的front打印出第一层结点元素,接下来把第一层结点的左右结点压栈,再次用front记录栈顶元素,然后pop出栈顶元素,依次类推。设二叉树的根节点所在层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第二层上的节点,接着是第三层的节点,以此类推,

2023-12-21 10:44:58 1658 3

原创 Linux基本指令

4. 当我们使用 ls -la 这个指令时,会看到下图结果,在Linux中,.开头的文件代表隐藏文件。为什么要有.和..呢?与head相对应,如果想查看文件结尾,可使用tail,tail big.txt默认把文件的后10行提取出来。管道就有入口和出口,管道是用来传输资源的,那么在计算机中,资源是什么呢?接下来,我们继续学习more指令:当我们查看大文件时,有可能会有多行,more可以打满一屏,就停下来,让用户下翻,逐行进行阅读。因为在访问任何文件之前,都必须先找到这个文件,并且文件的路径必须有唯一性。

2023-12-16 15:54:16 162 4

原创 数据结构-栈和队列

所谓栈,是一种特殊的线性表,只允许在固定的一端进行插入删除操作。进行数据插入删除的一端叫做栈顶,另一端叫做栈底,栈中的数据遵循先入后出的原则。压栈:栈的数据插入操作叫做压栈,压栈是在栈顶插入数据。出栈:栈的数据删除操作叫做出栈。出栈是在栈顶删除数据。所谓队列,只允许在一端插入数据,在另一端删除数据,并且具有先进先出的特点。入队列:进行插入数据的一端称为队尾出队列:进行删除数据的一端称为队头。

2023-11-15 16:41:45 172 8

原创 随机链表的复制

给你一个长度为n的链表,每个节点包含一个额外增加的随机指针random,该指针可以指向链表中的任何节点或空节点。构造这个链表的。深拷贝应该正好由n个节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的next指针和random指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。。

2023-11-10 09:12:47 108 1

原创 环形链表I和II

给你一个链表的头节点head,判断链表中是否有环。如果链表中存在环,则返回true。否则,返回false。

2023-11-09 14:52:09 88 1

原创 相交链表~

给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回null。图示两个链表在节点c1开始相交题目数据整个链式结构中不存在环。,函数返回结果后,链表必须。

2023-11-09 14:33:32 59

原创 数据结构-链表

在上面,链表的指针plist刚开始为NULL,即没有一个结点,这就叫不带哨兵位;当初始链表中带有一个结点,并且这个结点不存储有效数据,而是用来存储即将插入的第一个结点的地址,这就叫哨兵位。再来实现尾删,尾删时要分为链表中有1个结点和大于等于2个结点这两种情况,如果链表中只有一个结点,那么除了删除掉这个结点外,还要让plist指向NULL;在这个结构体中,有两个成员,第一个是val,第二个是结构体类型的指针next,并将这个结构体类型重命名为SLNode;、非顺序的存储结构,数据元素的。

2023-11-08 16:30:03 202

原创 超简单超实用的网页视频下载方法

想必大家经常需要下载网页视频,以便自己离线观看,这篇文章就来说一种超简单超实用的快捷方法,,三四步轻松搞定!接下来以Google浏览器网页视频和Microsoft Edge浏览器网页视频下载为例,来详细说明如何轻松下载网页视频~,其实这两个浏览器的网页视频下载方式大同小异。

2023-11-08 14:10:54 4804

原创 链表的中间结点

具体来说就是定义两个指针,一快一慢,快指针一次走两步,慢指针一次走一步,当快指针走到末尾时,慢指针所指向的结点即为中间结点。因此,综合以上两种情况,当fast指向结点的val==NULL或者fast==NULL时,这时的slow即为所求中间结点。,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。

2023-11-02 16:36:10 72

原创 移除链表元素

这道题的思路是,设置prev和cur两个结构体指针,prev初始化为空,cur指向链表的第一个元素,接下来分两种情况讨论:1.如果cur->val == val,那么我们要把这个元素从链表中删除掉,并待删除的元素的前一个元素指向待删除的元素的后一个元素,以此删除元素;,在cur->val=val这种情况下,如果prev==NULL,这说明prev一直没动,那么就不能完成上述1中的操作(因为1中的操作需要对prev解引用),此时需要让head=next;=NULL,才可以完成上述1中的操作。

2023-11-02 16:17:21 53

原创 合并两个有序数组

然后继续比较nums1的倒数第二个元素和num2的倒数第一个元素,把较大值放到nums1的倒数第二个元素位置处,以此类推。显而易见,这里是一个循环,那么循环的条件是什么呢?,那么就说明nums2中的所有元素都被挪到nums1中了,而nums1中的元素肯定也都在nums1中,这就表明所有的元素都已经被放到nums1中了,那么大功告成;,那此时i2必定大于等于0,即i2中的元素还没有被挪完就退出循环了,那么在退出循环后必须把nums2中剩下的元素都挪到nums1中。个元素表示应合并的元素,后。

2023-10-30 17:37:01 67

原创 数据结构——顺序表

顺序表是用一段的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。

2023-10-30 16:39:07 194

原创 删除有序数组中的重复项

本质上是,j依次找跟i位置不相等值,依次从前往后覆盖存储。,返回删除后数组的新长度。删除重复出现的元素,使每个元素。

2023-10-30 15:35:56 47

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

这个代码和上面的例8完全一样,执行过程也完全一样,但是求得时空间复杂度,在递归时,函数先往深调用,最多创建N个函数栈帧,但最后的Fib(2)调用结束后,Fib(2)函数栈帧销毁,开辟和其同一深度的函数栈帧Fib(1),此时还是N个函数栈帧,然后销毁Fib(1)的函数栈帧,创建上一深度Fib(3)的函数栈帧,再销毁,。该程序的执行次数为N-1 N-2 ...1这样的等差数列,求和(N-1)*N/2,最高阶数为1/2*N^2,因此,省略前面的相乘系数1/2,算法的复杂度是O(N^2)。得到的结果就是大O阶。

2023-10-22 21:39:46 219

原创 交换奇偶位

那么如何得到一个数二进制位的奇数位和偶数位呢,假设我们想得到11111111的奇数位和偶数位,可以让这个二进制数分别按位与上01010101和10101010,这两个数就是0x55和0xaa,因此,对于一个整数,我们让其分别按位与0x55555555和0xaaaaaaaa即可得到奇数位和偶数位,然后让奇数位左移一位,偶数位右移一位,再相加即可。写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。

2023-10-19 17:44:00 100

原创 宏offsetof的使用及其模拟实现

在这个例子中,结构体成员c1相较于结构体起始位置偏移量是0,结构体成员a相较于结构体起始位置偏移量是4,结构体成员c2相较于结构体起始位置偏移量是8,。将0地址看作结构体的起始地址,将0地址强制转换成结构体指针类型,取出结构体成员的地址,将其转换成无符号整形size_t类型。宏offsetof有两个参数,第一个参数是结构体类型,第二个参数是结构体成员,计算的是。使用宏offsetof的时候需要包含<stddef.h>这个头文件。那么如何自己模拟实现offsetof这个宏呢?

2023-10-19 17:18:31 95

原创 BC146 添加逗号

对于一个较大的整数 N(1<=N<=2,000,000,000),比如 980364535,我们常常需要一位一位数这个数字是几位数,但是如果在这 个数字每三位加一个逗号,它会变得更加易于朗读。对于这道题,我的想法就是把输入数字n的每一位存到一个字符数组中,同时每存3个数字就存一个' , ',直到把数字存完,获取每一位的思路就是先%10,然后/10,依次循环。因此,这个数字加上逗号成如下的模样:980,364,535请写一个程序帮她完成这件事情。输出:980,364,535。输入:980364535。

2023-10-19 15:32:37 52

原创 访问量突破1W,纪念一下~

Mr.kanglong, 继续加油!

2023-10-15 11:02:26 167

原创 atoi函数及其模拟实现

那么具体是怎么样的呢。5.数字中间有其他字符。

2023-10-13 21:16:28 109 1

空空如也

空空如也

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

TA关注的人

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