- 博客(32)
- 收藏
- 关注
原创 C++中的多态
多态是⼀个继承关系的下的类对象,去调⽤同⼀函数,产⽣了不同的⾏为。⽐如Student继承了Person。Person对象买票全价,Student对象优惠买票。2.1.1 实现多态还有两个必须重要条件:• 必须指针或者引⽤调⽤虚函数• 被调⽤的函数必须是虚函数。说明:要实现多态效果,第⼀必须是基类的指针或引⽤,因为只有基类的指针或引⽤才能既指向派⽣类对象;第⼆派⽣类必须对基类的虚函数重写/覆盖,重写或者覆盖了,派⽣类才能有不同的函数,多态的不同形态效果才能达到。2.1.2 虚函数。
2024-09-17 15:09:23 1071 43
原创 Linux基本指令
touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。:对于目录,该命令列出该目录下的所有子目录与文件。复制: ctrl + insert (有些的 insert 需要配合 fn 来按)Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。touch一个不存在的文件113,ll展开文件发现新建了一个113文件。:在当前目录下创建一个名为 “dirname”的目录。将当前工作目录改变到指定的目录下。: ls [选项][目录或文件]
2024-09-09 19:54:50 761 38
原创 【数据结构】二叉树
通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。这里我们从倒数的第一个非叶子结点的子树开始调整,一直调整到根结点的树,就可以调整成堆。删除堆是删除堆顶的数据,将堆顶的数据根最后一个数据一换,然后删除数组最后一个数据,再进行向下调整算法。:一个结点含有的子树的根结点称为该结点的子结点;
2024-08-24 18:33:03 941 48
原创 【数据结构】栈和队列
队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有。:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。压栈:栈的插入操作叫做进栈/压栈/入栈,出队列:进行删除操作的一端称为。
2024-08-23 14:45:17 743 53
原创 【数据结构】链表
链表的结构跟火车车厢相似,淡季的时候车次的车厢会相应减少,旺季的时候车次的车厢会额外增加几节,只需将火车里的某节车厢去掉/加上,不影响其他车厢,每节都是相互独立的。链表中每个节点都是独⽴申请的(即需要插⼊数据时才去申请⼀块节点的空间),我们需要通过指针变量来保存下⼀个节点位置才能从当前节点找到下⼀个节点。当我们想要从第⼀个节点⾛到最后⼀个节点时,只需要在前⼀个节点拿上下⼀个节点的地址(下⼀个节点的钥匙)就可以了。链表是线性表的一种,物理结构不一定是线性的,逻辑结构一定是线性的。
2024-08-20 20:12:32 1566 51
原创 数据在内存中的存储
其实超过⼀个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分为⼤端字节序存储和⼩端字节序存储,下⾯是具体的概念:⼤端(存储)模式:是指数据的低位字节内容保存在内存的⾼地址处,⽽数据的⾼位字节内容,保存在内存的低地址处。(低放高)⼩端(存储)模式:是指数据的低位字节内容保存在内存的低地址处,⽽数据的⾼位字节内容,保存在内存的⾼地址处。(高放低)上述概念需要记住,⽅便分辨⼤⼩端。
2024-08-20 00:23:40 1152 43
原创 C++中的继承
1.2.1定义格式class 派生类 : 继承方式 基类//子类内部自定义属性...下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类。(因为翻译的原因,即叫父类/子类,也叫基类/派生类)1.2.2继承父类成员访问方式的变化继承关系和访问限定符1.2.3继承基类成员访问方式的变化继承规则类成员/继承方式public继承protected继承private继承父类的public成员子类的public成员子类的protected成员。
2024-08-08 17:50:56 1708 39
原创 C++的STL简介(四)
list_node来实现每个节点,list_iterator和list_const_iterator是两个不同版本的迭代器一个是普通迭代器一个是const类型的迭代器,名字上也有所区分,list本身就有迭代器的效果,这个是为了模拟这个,重载了一些基本运算符,而list是统一管理节点,具有增删查改等效果。List是连续的容器,而vector是非连续的容器,即list将元素存储在连续的存储器中,而vector存储在不连续的存储器中。在列表中遍历速度很慢,因为列表元素是按顺序访问的,而vector支持随机访问。
2024-08-02 18:32:50 996 29
原创 C++的STL简介(二)
简单用typedef重定义char* 来模拟iterator获取begin()和end()提取字符重新构建string类。在指定位置插入字符或字符串。
2024-07-27 16:52:55 656 26
原创 C++的STL简介(一)
STL(standarf template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。
2024-07-23 22:34:27 2074 26
原创 C++中的模板
T1 ,classT2 ,... ,classTnclass类模板名//类内成员定义一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链 接起来形成单一的可执行文件的过程称为分离编译模式。return 0;编译器报错解决方案1. 将声明和定义放到一个文件 "xxx.hpp" 里面或者xxx.h其实也是可以的,推荐使用这种//a.h。
2024-07-22 22:46:02 1088 8
原创 C/C++内存管理
如果申请的是内置类型的空间,new和malloc,delete和free基本相似,不同的地方是:new/delete申请和释放的是单个元素的空间,new[]和delete[]申请的是连续的空间,而且new在申请空间失败时会抛异常,malloc会返回空。自定义类型在创建时会额外开一个整形放在开头记录对象个数,而编译器看到B没有写析构函数而优化了所以没有开,这个整形开辟是方便delete[]释放的,B释放的ptr2的指向的空间,释放完全,而A还有一个整型大小没有释放,所以内存泄漏报错。
2024-07-19 18:00:24 1117 11
原创 C++基础(三)
尽管使用初始化列表初始化,因为那些你不在初始化列表初始化的成员也会走初始化列表,如果这个成员在声明位置给了缺省值,初始化列表就会使用这个缺省值,如果你没有给缺省值,对于没有显示在初始化列表初始化的自定义类型成员会调用这个成员类型的默认构造函数,如果没有默认构造会编译报错。之前的构造函数,初始化成员变量主要使用函数体内赋值,构造函数初始化还有一种方式,就是初始化列表,初始化列表的使用方式是以一个冒号开始,接着是一个以逗号分隔开的数据成员列表,每个“成员变量”后面跟一个放在括号中的初始值或表达式。
2024-07-15 15:19:10 1317 13
原创 C++基础(二)
类的定义格式class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意定义结束时后面分号不省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或成员函数。//text.cpp//成员变量int* a;int top;//成员函数void Pop()//分号不能省略int main()return 0;为了区分成员变量,一般习惯上成员变量会加一个特殊标识,如成员变量前面或后面加_或者m_开头。
2024-07-11 21:13:43 1424 11
原创 C++基础(一)
C++中域有函数局部域,全局域,类域;域影响的是编译时语法查找一个变量/函数/类型出处(声明或定义)的逻辑,所以有了域隔离,名字冲突就解决了。局部域和全局域除了会影响编译查找逻辑,还会影响变量的声明周期,命名空间域和类域不影响变量声明周期。定义命名空间,需要用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。引用不是新定义一个变量,而是给已存在变量去了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。调用域下面的变量/函数等。
2024-07-08 23:01:53 1629 11
原创 八大排序之计数排序
由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小值的差加上1),这使得计数排序对于数据范围很大的数组,需要大量时间和内存。例如:计数排序是用来排序0到100之间的数字的最好的算法,但是它不适合按字母顺序排序人名。通俗地理解,例如有 10 个年龄不同的人,统计出有 8 个人的年龄比 A 小,那 A 的年龄就排在第 9 位,用这个方法可以得到其他每个人的位置,也就排好了序。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。1. 计数排序的特征。
2024-06-22 20:12:42 312 3
原创 八大排序之希尔排序
希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。希尔排序又称缩小增量排序,因 DL.Shell 于 1959 年提出而得名。它通过比较相距一定间隔的元素来进行,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。
2024-06-16 20:17:38 306 2
原创 打印ArrayList打印出地址该怎么解决?
无论这三种哪种方式只要是传引用类型而不是传值都是在打印地址,此时我们只要重写toString就行了。编写程序,采用Arraylist存储3只猫的姓名,性别和花色信息,并输出。建立一个Arraylist类型 al 存入3个数据。方式三 iterator。方式一for -in。
2024-06-07 10:01:04 373 1
原创 c语言贪吃蛇
贪吃蛇(也叫做贪食蛇)游戏是一款休闲益智类游戏,有PC和手机等多平台版本。既简单又耐玩。该游戏通过控制蛇头方向吃蛋,从而使得蛇变得越来越长。贪吃蛇游戏最初为单机模式,后续又陆续推出团战模式、赏金模式、挑战模式等多种玩法。下面我们用c语言来实现贪吃蛇。首先我们在进行游戏的设置前初始化一些参数。
2024-05-04 14:34:10 404 4
原创 Win32 API设置控制台相关属性
小黑框也是有坐标的概念,为了我们后续游戏的进行,COORD是windows API中定义的一个结构体,表示一个字符在控制台屏幕缓冲区上的坐标,坐标系(0,0)的原点位于缓冲区的顶部左侧单元格。GetStdHandle是一个Windows API函数,他用于从一个特定的标准设备(标准输入,标准输出错误)中取得一个句柄(用来标识不同设备的数值),使用这个句柄可以操作设备。setlocale 函数用于修改当前地区,第LC_ALL 第二个参数为"C"正常模式和""本地化模式。//切换到本地化,支持宽字符等的输出。
2024-05-03 13:54:48 1069 2
原创 【数据结构】顺序表
顺序表,全名顺序存储结构,是线性表的一种。通过《什么是线性表》一节的学习我们知道,线性表用于存储逻辑关系为“一对一”的数据,顺序表自然也不例外。不仅如此,顺序表对数据的物理存储结构也有要求。顺序表存储数据时,会提前申请一整块足够大小的物理空间,然后将数据依次存储起来,存储时做到数据元素之间不留一丝缝隙。例如,使用顺序表存储集合,数据最终的存储状态如图 1 所示:图 1 顺序存储结构示意图。
2024-04-20 11:54:27 708 3
原创 C语言预处理详解
C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理阶段完成的 基本语法: 效果: #define允许把参数替换到文本中,这种实现通常称为宏,或者宏定义下面是宏的申请方式:其中的parment -list是一个由逗号隔开的符号,它们可能出现在stuff中注意:参数列表的左括号必须与name相邻,如果出现空白字符,也会被解析成stuff的一部分举例: #define 实现的是整体替换,如下列代码:不能想当然的认为是把a+1计算成6然后再进行替换结果为36,宏定义的参数中只进行替换容易受到宏之外的
2024-04-05 01:06:18 2188 2
原创 C语言动态内存管理
c语言提供了一个动态内存开辟的函数,下面是cpiusplus中的介绍malloc是一个一个动态内存开辟的函数原型如下:这个函数向内存申请一块连续可用的以字节为单位的空间,并返回指向这块空间的地址。如果开辟成功,则返回一个指向开辟好空间的指针,如果开辟失败,返回NULL指针。开辟后记得判断是否开辟成功,否则不可使用返回值void*,所以malloc函数并不知道开辟空间的类型,具体在使用的时候由使用者自己决定如果参数size_t为0,malloc的行为标准是未定型,取决于编译器。
2024-04-04 16:57:06 588 3
原创 常用字符串函数
源头地址里的内容覆盖掉 目的地地址里的内容,并且返回目的地地址,目的地的大小要足够大才能覆盖完源头地址的字符。看看cplusplus对strcpy的解释。strerror能够打印错误码信息。两个地址内的字符串都得包含\0。
2024-03-14 20:23:15 445 3
原创 c语言实现结构体冒泡排序
【c语言实现冒泡排序 - CSDN App】http://t.csdnimg.cn/5dXjF【c语言使用qsort实现冒泡排序 - CSDN App】http://t.csdnimg.cn/qV3Rg。
2024-03-10 20:19:27 533 2
原创 c语言使用qsort实现冒泡排序
以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较,最后实现从小到大排序。冒泡排序的原理是:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。可以看看我这个博客【c语言实现冒泡排序 - CSDN App】http://t.csdnimg.cn/5dXjF。让我们来看看cplusplus中对qsort的官方解释。把p1 p2反过来则降序。
2024-03-10 18:36:15 557 1
原创 c语言相关操作符详解
再此之前我们先了解一下数在计算机中存储的规则原码:直接按照正负数的形式翻译成二进制得到的就是原码反码:将原码的符号位保持不变,其他位按位取反得到反码补码:反码+1得到补码注意:正数和负数的原反补规格不相同,正数的反码补码和原码相同,负数的则遵循以上原则,数据在内存中以二进制补码的形式进行计算直观图。
2024-03-08 23:01:03 518 2
原创 c语言实现冒泡排序
我们假设数组的下标为n,俩俩比较,第0个和第1个比大小,不符升序就交换元素,把更大的放在后面,一次遍历就能排好一个元素的位置,那这样一共要排数组元素个数的次数,为了代码能够通用,索性用sz来接受数组元素个数,待排序有sz个就要进行sz次排序,这就是下面外层for的用途是决定了趟数,每次排序都要比先前少排一个,所以这里的内存层for中n代表剩余其中某一趟中比较次数,n要比sz少一,如果不加这层的话会永远陷入拍第一个元素的死循环当中,其实,我们可以把他们用数组储存起来,然后用遍历的方式依次俩俩比较。
2024-03-08 11:51:16 364 2
原创 输入两个数求他们的最大公因数
{if(a%b==0&&c%b==0)//b开始从b自减到0,如果期间有公因数就会被打印,b从最大的数本身开始递减筛选最大公因数。//把b用c存储起来,从而让b成为一个可变化的量让他模拟公因数的所有可能。if(a<b)//如果a>b就不动,a<b则把数字调换。}//确保a>=b方便后续不要分类讨论计算。
2023-12-02 00:28:21 118 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人