- 博客(35)
- 收藏
- 关注
原创 C/C++内存管理
malloc只开空间,new既开空间又调用构造函数初始化。delete会调用析构函数,free不会。malloc和free:malloc的对象只是开辟了空间,并没有初始化,free后也只是普通的释放。new和delete:使用new,既可以开辟空间,又调用了构造函数从而完成初始化,而delete时调用了析构函数,以此释放空间。new的原理调用operator new函数申请空间在申请的空间上执行构造函数,完成对象的构造delete的原理在空间上执行析构函数,完成对象中资源的清理工作。
2024-07-13 15:11:03
971
原创 类和对象——【const成员】【static成员】【友元】【内部类】
本文讲述了:类和对象——【const成员】【static成员】【友元】【内部类】
2024-07-11 06:05:49
1067
原创 类和对象——【运算符重载】
P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。P. S.:测试代码均未展示头文件iostream的声明,使用时请自行添加。
2024-07-10 23:12:51
777
原创 类和对象——【构造函数】【析构函数】【拷贝构造函数】
P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。P. S.:测试代码均未展示头文件iostream的声明,使用时请自行添加。
2024-07-10 18:29:11
720
原创 类和对象——基础知识
/类体:由成员函数和成员变量组成 };class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。int _age;
2024-07-02 23:15:03
941
原创 C++入门基础知识(小白必备)
我们知道,如果函数没有加inline的话它会在编译期间进行符号汇总,在汇编期间生成符号表,最后链接的时候会进行符号标的合并,定义函数的文件和声明函数的文件就都能拿到函数的地址,就可以使用函数了。尽管定义和声明分离后面 使用函数的时候也能找到函数的地址。
2024-06-24 21:10:10
777
原创 C++基础知识——引用
P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。
2024-06-23 20:17:19
922
原创 C++基础知识——命名空间
命名空间是一种用来避免命名冲突的机制,它可以将一段代码的名称隔离开,使其与其他代码的名称不冲突;命名空间的原理是将一个全局的作用域分成一个个命名空间,每个命名空间是个单独的作用域,同时若是在同一个作用域内可能出现的命名冲突也不会造成影响,有效避免了命名空间的污染;从上面可知命名空间的作用,既然命名空间能够有效防止命名冲突,那该如何定义命名空间?在定义命名空间时,应该使用 namespace 修饰且在该修饰词后定义名字并在其后跟 **{ }**在{ }内的元素即为该命名空间的成员;
2024-06-20 21:31:45
819
原创 排序方法——《归并排序》
P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。
2024-06-20 20:38:48
926
原创 排序方法——《插入排序》和《希尔排序》
P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。
2024-06-12 22:07:11
949
原创 排序方法——《快速排序》
快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。快速排序分为两种:递归法非递归递归法又分为三种:hoare法双指针法挖坑法快速排序整体的综合性能和使用场景都是比较好的,所以才敢叫快速排序时间复杂度:O(N*logN)空间复杂度:O(logN)
2024-06-11 17:09:25
626
原创 排序方法——《选择排序》
P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。
2024-06-05 21:12:15
527
原创 排序方法——《冒泡排序》
P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。@[TOC]
2024-06-05 19:54:42
307
原创 二叉树链式结构的前序、中序、后序、层序遍历
设二叉树的根结点所在层数为1,层序遍历就是从所在二叉树的根结点出发,首先访问第一层的树根结点,然后从左到右访问第2层上的结点,接着是第三层的结点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。他的实现需要用到队列的实现,队列的相关代码在前的博客中已经详细的介绍过了,所以这里我们直接运用。后序遍历**(Postorder Traversal)——访问根结点的操作发生在遍历其左右子树之后。实现二叉树的遍历,我们要先手搓出一个二叉树,在次基础上实现二叉树的前序、中序、后序、层序遍历。
2024-06-01 17:24:08
702
原创 排序方法——堆排序
以上是向上调整建堆的全过程,最终得到数组arr[ ] = {10, 8, 9, 4, 7, 5, 6, 1, 3, 2}。这里将arr[0]与arr[end]交换,再进行向下调整,遍历整个数组,结束后数组变为有序数组,堆排序也就完成了。假设有一个数组:arr[ ] = {2, 8, 9, 4, 7, 5, 6, 1, 3, 10}每一次循环结束后,end–, 继续将arr[0]与arr[end]交换,继续进行同样的排序。以上是一次循环的过程,后面的循环同理,最后就会的到一组有序的数组。
2024-06-01 14:07:26
466
原创 对列的实现(单链表)
后面的每个函数都要传两个参数,并且是二级指针,这样太麻烦了而且容易出错,所以可以将头节点,尾节点分装成一个结构体,来表示整个队列的信息,并且可以额外加入一个变量 size 来记录队列中的数据个数。创建完节点以后,我们要考虑到传参问题,如果需要实现队列的功能,“先进先出”,那么就需要用两个指针来分别标记头节点和尾节点。在以后使用的时候,我们可能会在链表中存取其他类型的变量,所以将链表中的int类型也进行重命名操作,方便以后得更改。运用链表,我们要先创建一个结构体变量,对其进项重命名操作,方便我们后面的使用。
2024-05-15 17:07:28
626
1
原创 “ 树 ” 的概念
通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。:若一个结点含有子结点,则这个结点称为其子结点的父结点;:以某结点为根的子树中任一结点都称为该结点的子孙。:一个结点含有的子树的根结点称为该结点的子结点;具有相同父结点的结点互称为兄弟结点;:一个结点含有的子树的个数称为该结点的度;:从根开始定义起,根为第1层,根的子结点为第2层,以此类推;
2024-05-14 17:57:45
731
3
原创 【证明】快慢指针在带环链表中是否存在无法相遇的情形
在了解本次内容前,可以先了解一下带环链表中使用快慢指针来判断链表是否带环的内容。链表问题——找到环形链表入环节点而本文我们探究的问题是快慢指针在带环链表中是否存在无法相遇的情形,在此背景下,我们的快慢指针之间的速度比可以不再是快指针走两步,慢指针走一步,而是可以将他们定位任意的步数,只要快指针走的比慢指针快即可。本问探究的情况是当快指针依次走三步,慢指针一次走一步的情形,此情形的道德结论同样适用于其他速率比(例如 3:5,2:5)。PS.下述证明过程中的速率比均为实际步数比,
2024-05-09 21:40:46
657
原创 栈的创建(顺序表)
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。通俗一点的理解就是,栈就像是一个羽毛球筒一样,先放进去的羽毛球,最后才能拿出来,反而后放进去的可以先拿出来,也就是我们上面提到的LIFO:Last In First Out。
2024-05-09 16:28:25
459
原创 链表问题——找到环形链表入环节点
而在上面分析中 通过 fast 走过的路程 L + ( X + 1 ) * C + N = 2L + 2N,可以推算出 L = ( X + 1) * C - N,即 L = X * C + C - N,故当 point 从头节点出发,走过 L 后到达入环点,此时 slow 又从它与 fast 相遇的位置走了 X 圈环后,又走了 C - N的距离,即此时 slow 也刚好到达入环点,也就是此时 point 与 slow 相遇,此时的 point 就为入环点。slow 走过的路程为:L + N。
2024-05-07 21:09:48
483
原创 链表带环问题——判断链表中是否有环
这时就不再是慢指针在后,快指针在前了,我们可以将其看作是快指针在慢指针的后面追赶,而我们再让它们前进一段时间后,快指针会和慢指针走到同样的位置,因为这时候他们的速度差为 1个节点(前面讲到过慢指针走一个节点,而快指针走两个节点),故不论慢指针进入环时他们相距多少距离,都一定会相遇,而当 fast == slow 时,我们就可以判断这个链表时带环得了。如果题目没有标明,那我们又改怎么办呢?我们让快慢指针同时指向链表的头部,之后让快指针每次在链表中走两个节点的位置,而慢指针每次走一个节点的位置,同时进行。
2024-05-07 20:46:14
541
1
原创 C语言实现经典游戏——《贪吃蛇》
我们要先获取控制板上光标的信息,对光标进行相应的操作。这里所要用到的函数我在上一篇文章中已经详细解释过了,所以我们这里直接使用。link//隐藏光标,将光标设置到指定位置//设置面板system("title 贪吃蛇");//获取标准输出设备的句柄//定义一个光标信息结构体//获取光标信息//设置光标可见度//设置光标信息我们要定位光标,在相应位置打印相应的文字。这里可以创建一个函数SetPos,来定位光标//获取光标位置//获取标准输出设备的句柄。
2024-05-04 19:49:30
978
原创 Win32API——对控制台的相关操作
Windows这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外,它同时也是⼀个很⼤的服务中⼼,调⽤这个服务中⼼的各种服务(每⼀种服务就是⼀个函数),可以帮应⽤程序达到开启视窗、描绘图形、使⽤周边设备等⽬的,由于这些函数服务的对象是应⽤程序(Application),所以便称之为ApplicationProgrammingInterface,简称API函数。平常我们运⾏起来的⿊框程序其实就是控制台程序我们可以使⽤cmd命令来设置控制台窗⼝的⻓宽:设置控制台窗⼝的⼤⼩,30⾏,100列。
2024-04-21 22:06:44
1022
1
原创 C语言程序编译和链接
我们在 test.c ⽂件中每⼀次使⽤ Add 函数和 g_val 的时候必须确切的知道 Add 和 g_val 的地址,但是由于每个⽂件是单独编译的,在编译器编译 test.c 的时候并不知道 Add 函数和 g_val变量的地址,所以暂时把调⽤ Add 的指令的⽬标地址和 g_val 的地址搁置。编译过程就是将预处理后的⽂件进⾏⼀系列的:词法分析、语法分析、语义分析及优化,⽣成相应的汇编代码⽂件。我们在 test.c 的⽂件中使⽤了 add.c ⽂件中的 Add 函数和 g_val 变量。
2024-03-29 16:41:39
977
1
原创 C语言中的文件和文件操作
磁盘(硬盘)上的⽂件是⽂件。但是在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类的)。下面说的适⽤于所有输⼊流⼀般指适⽤于标准输⼊流和其他输⼊流(如⽂件输⼊流);所有输出流⼀般指适⽤于标准输出流和其他输出流(如⽂件输出流)。如需引用,注明地址。
2024-03-28 12:37:43
867
原创 大小端字节序存储和字节序判断
是指数据的低位字节内容保存在内存的⾼地址处,⽽数据的⾼位字节内容,保存在内存的低地址处是指数据的低位字节内容保存在内存的低地址处,⽽数据的⾼位字节内容,保存在内存的⾼地址处。2.{4.6.}在我们调试时发现系统将十六进制数字0x11223344的低位字节 ”44“ 放到了内存的低地址处,所以这段代码字节序的存储方式是小端存储。
2024-03-25 18:10:21
482
原创 C语言中 if 语句,Switch 语句, for 语句, while 语句, do while 语句的使用
执行程序时从“ if ”开始,逐一判断圆括号内表达式是否为真,如果为真就执行,反之向下进行判断,直到最后一个“ else if ”的判断为假,就执行“ else ” 后的语句。for循环首先执行exp1初始化循环变量,在判断exp2是否为真,为真接着执行exp4、exp3,然后在进行exp2的判断,直至循环至exp2的判断结果为假,跳出循环。while语句先执行exp1,判断exp1为假,直接跳出循环,exp1为真,执行exp2,语句执行完后再继续判断,是否进行下一次循环。
2024-01-27 16:39:17
1048
原创 我的第一篇博客
我写的第一个代码是打印“hello”,第一次完整的写出一个代码,尽管很简单,内心其实无比兴奋哈哈。在我听的第一堂课,了解了C语言,知道了源文件头文件,知道了怎么在VS上写代码,怎样让代码运行起来。这些都是我学习之路的开始,我喜欢计算机,我相信我会成为一名优秀的程序员。学习计算机之路,会遇到很多困难,我会认真克服每一次的难关,寻求师长们的帮助,及时解决问题。关于IT公司,目前还没有确切的目标,现在最根本的目标是先学好编程,我相信只要技术硬,不怕以后没有好企业。现在是寒假,闲暇时间很充足,所以一天。
2024-01-17 19:30:55
371
空空如也
内联函数的声明与定义
2024-06-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人