自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++:运算符重载】

运算符重载特点:函数名由operator+运算符组成注:不能通过其他符号创建新的操作符,只能使用C/C++语法存在的操作符 重载操作符必须有一个类类型参数,原因:不能重载操作符改变内置类型的行为 当类成员操作符重载时(操作符重载的函数写在类里面),要注意函数的第一个参数是隐含的this指针,比实际要少传一个参数 .*,::,sizeof,?:,.这五个操作符不可以重载赋值运算符重载赋值运算符重载只能重载成类的成员函数,不可以重载成全局函数 用户如果没有显示实现时,编译器会

2024-07-07 12:06:20 223

原创 【C++:类的基础认识和this指针】

实例化的对象中,每一个对象只存储他们的成员变量,成员函数存储在公共区域(代码区),这种方式的存储减少了空间浪费。声明和定义分离时,有可能两个类中会有相同的函数,所以,在函数名那里加入类名就可以避免此冲突。如果一个类中没有成员变量,该类的大小为1字节,而不是0字节,这里大小给1字节的原因是标志该类的存在。4.this指针存放在栈上,This指针是一个形参,形参在栈上存储。1.不可以在成员函数形参或者实参那里显示写,会报错。this指针是类中成员函数的第一个隐含的参数。类同样遵守内存对齐的规则。

2024-07-06 18:56:30 206

原创 【C++:默认成员函数】

构造函数是一个特殊的成员函数注:无参构造函数在实例化时,不需要增加(),原因:会与函数声明混淆无参和有参的构造函数不能同时存在,原因:调用会存在歧义构造函数如果自己写了,那么编译器就不会自动生成,以下就是自己写了构造函数,编译器没有自动生成,导致定义的对象找不到对应的构造函数出现的错误构造函数对于内置类型不做处理(一般是随机值),自定义类型会调用它对应的构造函数(如果自己显式定义,编译器会自动生成无参构造函数)

2024-07-06 18:56:14 251

原创 【C++:内联】

代码量比较大且频繁调用的函数使用内联会导致代码膨胀(举个例子:本来是五行代码,使用内联函数直接增加了大量的代码行),影响程序的运行效率。一个函数是内联函数,就会在调用该函数时,直接把函数执行的指令展开,如果不是内联函数,在调用函数时会将call函数的地址。同一个函数在两个文件中重复包含导致的链接问题,采用以下三种方式可以解决该问题。大函数考虑1,2方法,小函数考虑inline。正确的使用内联能有效的提高程序运行的效率。用inline修饰的函数叫做内联函数。auto不能作为参数,也不能定义数组。

2024-07-06 10:27:05 228

原创 【C++11:右值引用,列表初始化】

构造函数的函数名与函数体之间增加一个列表,用于对成员初始化在实例化对象时,支持单/多参数的隐式转化,同时也可以省略=符号,让代码更简洁。

2024-07-01 21:40:30 358

原创 【C++:list】

list中的原生指针并不能满足迭代器的需要(迭代器需要通过++或者--的操作符对链表进行遍历)于是重新写一个关于迭代器的类,重载操作符,完善迭代器的需求。链表的空间并不是连续的,如果对原生指针进行++操作并不会拿到下一个节点的地址,于是封装一个类,重载运算符。重载操作符来管理迭代器的行为。疑问:重载运算符咋个重载?

2024-06-27 22:46:41 476

原创 【Linux:文件描述符】

文件描述符的分配原则:最小未分配原则而文件描述符的分配方式是找到当前没有被使用的最小的下标分配给新文件当close(0)关闭下标为0的元素,该文件按就会放在0的位置。

2024-06-27 21:16:31 261

原创 【C++:哈希】

小例子:手机通序录对联系人的分配,通讯录根据人名的首字母对联系人进行分类存储。这种就是哈希存储。通序录通过名字的首字母与联系人之间产生一种映射关系。

2024-06-24 17:47:06 687

原创 【linux:基础IO】

mode:当文件新打开一个文件,则需要给文件设置权限,设置权限时则传递一个8进制数字即可。返回值:成功返回一个文件描述符,失败则返回一个-1。打开方式与可选项是以按位与的方式进行组合的。buf:将buf指向的内容写到文件当中去。buf:将buf指向的内容写到文件当中去。以上三种方式只能存在一种,且必须存在。pathname:待要打开的文件。count:期望写多少字节。count:期望写多少字节。因此文件描述符是一个正整数。flag:以什么方式打开。

2024-05-29 08:56:13 266

原创 【Linux:进程程序替换】

圈起来的都是库函数,库函数是依靠系统调用函数。

2024-05-23 07:52:34 787

原创 【map:基础用法与细节注意】

map和set是一个关联容器,不仅仅是存储数据还能查找数据,存储的数据和数据之间关联很强。

2024-05-20 17:49:10 320

原创 【Linux:环境变量】

环境变量一般是指在操作系统中用来指定操作系统环境的一些参数。

2024-05-15 20:12:14 293

原创 【Linux:进程概念】

死亡状态,ps,aux是查不到该进程信息的,该进程当要被释放时,释放的前一刻进程状态标记为死亡状态,ps,aux能查进程信息全凭进程的组织双向链表,遍历该链表由此查看进程。程序的本质为一个文件,当程序跑起来时就叫做进程,这是一个动态的,由操作系统管理,操作系统分配cpu资源对进程进行一个管理。在此还需要知道的一个常识:CPU(中央处理器)的数量远小于进程数。操作系统内核(本质上就是某种代码的统称)+应用,操作系统的本质也是软件。进程是由操作系统管理的,程序运行起来叫做进程。1.所有的数据采用二进制的存储。

2024-05-13 14:39:29 423

原创 【STL:容器适配器&&仿函数】

第21行:deque<T>是类型,将该类实例化,然后赋给container,container的地位就相当于T,这里给缺省值,如果没有传容器适配器的类型就默认类型为deque, 多增加的这种接口叫做容器适配器。仿函数别名函数对象,重载了一个()让它在使用时像极了函数调用。为了让仿函数使用起来很像函数调用以及复用,这里用类封装了它的()重载。容器适配器可以理解为插头的转换器,容器适配器。栈和队列的实现不用vector和list是因为两者的缺点,而deque 则是二者的嫁接成果。

2024-05-12 10:17:26 196

原创 【STL:vector的基础实现】

vector是一个顺序表,可以存储任意类型的数据,而string只适合用于存储char,可以理解为string存储的数据是字符,但vector存储的数据类型更广泛。

2024-05-05 19:47:34 192

原创 【STL:string的基础介绍及使用】

string是一个表示字符串类的对象,而string类负责维护着string类型的字符串,用户只需要用string对象对数组进行维护。此外,string的成员是私有的,因此用户在使用时并不能访问到string类中的成员,string能实现的功能很多,基础的有对字符串的增删查改,也能对获取都短字符串的某个字符,所以string也支持访问某个单个的元素。

2024-05-01 23:00:37 15

原创 【C++:new,delete】

在C语言中,malloc失败会返回一个NULL指针,但C++为了符合面向对象的特性,于是让new的底层为一个operator new,而operator new这个函数封装了malloc和空间开辟失败抛异常。delete的底层也是封装了一个free。此外,还需要知道new和delete的底层是由operator new和operator delete在底层被调用,他们是全局函数,operator new 封装了一个malloc函数,而operator delete封装了一个free函数。

2024-05-01 10:04:23 239

原创 【C++:类与对象】

关键字:class没有成员对象的类大小为1字节,对象实例化的标志是开辟空间,这里的1字节恰好是为了证明该类对象的存在。面对对象的三大特性:封装,继承,多态。

2024-04-27 21:53:06 229

原创 【C++:命名空间、函数重载、内联】

命名空间的出现是为了解决命名冲突的问题,命名空间的使用如下:命名空间是可以嵌套的。

2024-04-26 20:10:24 167

原创 【C++:引用】

引用简单来讲就是给对象取别名,例如:李逵外号黑旋风,黑旋风就是李逵的别名。引用不会重新开辟空间,与之前的对象存储同一个空间。

2024-04-22 14:38:43 231

原创 【C++:多继承,虚拟继承】

一个子类同时拥有多个父类叫做多继承。但多继承同时也引来了菱形继承。

2024-04-17 16:11:14 200

原创 【C++:模板,特化,按需实例化】

模板的声明与定义可分离,但不支持分离在俩个文件中。当模板的声明与定义分离时,编译器在编译阶段只会查看调用的函数参数,名字是否匹配,在连接时,会出现连接错误,原因就是编译器找不到该函数的地址。只有实例化才会生成对应的函数,函数没有成功生成,就找不到地址。

2024-04-14 13:32:42 267

原创 【C++:继承】

如果子类定义了与父类同名的成员,该成员优先在子类中查找,子类成员会屏蔽父类对同名成员的直接访问,这叫做隐藏,也叫重定义。相同属性的复用,这里引入两个新名词,子类与父类, 每个类都含有父类,父类也叫做基类,子类继承父类的属性,同时含有父类不具备的属性,子类也叫做派生类。父类对子类引用:直接把子类中父类的那部分分割出来取别名,以下演示就可以得到证明,引用是父类是子类切割出来的。原因:(1)子类构造会自动调用父类构造,父类中缺少子类的一些属性,如果用父类初始化子类有可能有属性没有被初始化。

2024-04-12 23:26:33 224

原创 【Linux:yim和vim】

命令模式:允许使用者通过命令对文本进行一系列的操作。n+yy复制光标所选中的那一行,也可以一次复制多行,只需要在yy的前面加上你需要复制的行数即可n+p粘贴,粘贴内容到光标选定的下一行,也可以多粘贴几行(n+p)u撤销n+dd删除指定行,在前面带数字即可一次删除连续多行大小写快速切换n+x删除光标后的一个字符,前面加上数字,可以连续删除n个字符n+X删除光标前的一个字符,前面加上数字,可以连续删除n个字符n+r对光标指定的位置进行一个字符的替换R进入替换模式h光标向左移动j。

2024-03-24 16:44:31 759 1

原创 【Linux基础指令】

那普通用户也是可以删除root创建的文件的,前提是root创建的文件是在该用户的路径下创建的,否则普通用户删除不了root创建的文件。答:身份虽然切换成功了,但是其中的路径并没有切换成功,root转到普通用户,如果只是靠su 转换,那当前路径还是在root的路径下(我们可以用pwd来看看我们当前的路径)由于普通用户的权限的原因,所以不能创建文件/目录。最终权限=起始权限&(~umask)使用方法:tar -cvzf c可理解为create,创建压缩文件,v展开文件,z为压缩,f后面写创建的文件名。

2024-03-22 18:33:56 349 1

原创 【数据结构】:关于函数参数类型的错误及二叉树创建遇到的死递归

死递归在开始写递归经常遇到,避免死递归的最好解决方法,就是画递归展开图。

2023-12-24 11:31:10 50 1

原创 【数据结构】OJ题:用栈实现队列 相关问题

题目:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(pushpoppeekempty。

2023-12-19 22:38:04 57 1

原创 【数据结构】:单链表OJ(随机链表的复制)

给你一个长度为n的链表,每个节点包含一个额外增加的随机指针random,该指针可以指向链表中的任何节点或空节点。构造这个链表的。深拷贝应该正好由n个节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的next指针和random指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。。例如,如果原链表中有X和Y两个节点,其中。那么在复制链表中对应的两个节点x和y,同样有。返回复制链表的头节点。用一个由n个节点组成的链表来表示输入/输出中的链表。

2023-12-13 21:08:41 52 1

原创 【数据结构】:OJ题

如下图所示,我们可以看出这是一个镜面图像,俩结点的左右孩子的值刚好相反。

2023-12-12 08:34:02 39

原创 【数据结构】:队列的创建及初次写队列遇到的错误

创建一个结构体,成员有需要进队的元素和该元素的下个结点指向的地址,由于队列的特点,为了方便控制队头队尾进出,又创建一个结构体,存放分别指向队头和队尾的俩指针。

2023-12-04 23:22:06 77

原创 相交链表(数据结构初阶题)

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

2023-11-23 10:38:03 41

原创 移除链表元素

如图所示,每当cur走到等于val的值时,prev先保存索要释放的结点中储存的下一个节点的位置,再释放掉该节点,然后继续让cur往后走,直到cur的next指向NULL。

2023-11-20 19:06:05 43 3

原创 单链表的增删查改

链表与顺序表不同的是,链表有节点,且链表在空间中的从顺序不是连续的,链表通过地址对其进行访问。因此,链表的每一个节点地址都是随机的,每一个节点的地址即存此结点的这个地址,也存下一个结点的地址。

2023-11-18 15:29:09 56 1

原创 保姆级三子棋教程

三子棋是一个双人游戏,而游戏的输赢顾名思义,当三个子连在一块时,哪方赢。当棋盘下完没用空位时,还不能三个子连在一起的情况,则判为平局。

2023-10-24 14:32:15 75

原创 写一个功能简陋的通讯录(C语言写法)

思路:我们手机上的通讯录可以实现排序,查找,删除,修改,显示以及添加联系人的功能,而通讯录的实现则需要我们的结构体来对我们的联系人进行一个分装,储存的联系人我们可以知道TA的名,TA的年龄,TA的地址,TA的电话号码以及联系人的性别,这些我们都可以采用结构体的方式对联系人进行存储。因此我们先创建一个含有名字,性别,电话,住址,年龄的结构体,设计一个菜单选择通讯录的功能,再根据选择的功能,写分装函数实现。

2023-09-25 13:30:02 81 1

原创 字符串的逆序

有这样一个字符串,“abcdefg",现在需要这个字符串往左边逆序一个字母,得到”bcdefga"。请用代码展示。

2023-09-17 08:00:00 748 2

原创 如何在杨氏矩阵中查询数

杨氏矩阵是一个每行每列从左往右增加的一个二维数组,由此,我们可知,在每行的最右端的数字是这行最大的,每列最前的那个数是这列最小的,可参看下图以上就是小陈分析的杨氏矩阵解题思路。

2023-09-16 09:21:58 53 1

原创 字符串函数的介绍及模拟实现

/寻找目标空间的\0dest++;//追加源字符串dest++;str++;return s;前面小陈说了这个函数不能自己追加自己,并且说了原因,话不多说,还是用代码说话。我们把传给my_strcat参数全改为arr1,//寻找目标空间的\0dest++;//追加源字符串dest++;str++;return s;

2023-09-14 13:13:12 51 1

原创 Strlen函数的介绍及三种实现Strlen方式

strlen函数所引用的库函数是string.h,此外,strlen函数的返回值为一个无符号的数字,因此,strlen函数不适用于数学运算,strlen函数为一个计算字符长度的函数,它以'\0'为结束标志,若所计算的长度中不含有'\0',则计算出来的为一个随机数。

2023-09-09 20:56:14 492 1

原创 用函数指针来写一个简陋的计算器

从代码上,大家不难发现我们的switch语句写的过于冗余,为了让我们的代码变得更加的直观与简洁,我们可以考虑用一下我们的函数指针数组。首先从名字上,我们可以知道函数指针数组这是一个数组,其次他的数组里面的元素是由函数组成的,最后一个指针指向了这个数组。int *p = &arr (&arr是取出整个数组的地址,而如果只写arr数组名,取出的只是数组首元素的地址)3.知道这个函数指针数组后,我们需要怎么去使用它呢?对比下来,我们发现我们的代码变得比之前更加的简洁了。4.指向函数指针数组的指针的概念。

2023-07-13 14:43:47 100 1

空空如也

空空如也

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

TA关注的人

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