- 博客(33)
- 收藏
- 关注
原创 C++——String类讲解
C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列 的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户 自己管理,稍不留神可能还会越界访问。
2024-10-27 13:55:15
564
28
原创 C++——模版
class 类模板名// 类内成员定义例子:// 类模版class STpublic:_size = 0;int _size;// 扩容++_size;因为编译器不好确定栈的类型,所以这里用显示实例化来进行,使得编译器可以确定其类型。
2024-10-26 21:06:49
1026
15
原创 C++——内存管理
delete p2;我们可以看到左边调用了malloc,右边调用了new,但是malloc没有调用构造函数和析构函数,而new调用了这两个函数,这便是他们的一个区别。1. 调用operator new函数申请空间2. 在申请的空间上执行构造函数,完成对象的构造。
2024-10-26 15:02:58
1087
14
原创 C++——类和对象(四)
• 之前我们实现构造函数时,初始化成员变量主要使用函数体内赋值,构造函数初始化还有⼀种方式,就是初始化列表,初始化列表的使用方式是以⼀个开始,接着是⼀个以逗号分隔的数据成 员列表,每个"成员变量"后面跟⼀个放在括号中的。• 每个成员变量在初始化列表中只能出现⼀次,语法理解上初始化列表可以认为是每个成员变量定义初始化的地方。•,必须放在初始化列表位置进行初始化,否则会编译报错。• C++11支持在成员变量声明的位置给缺省值,这个缺省值主要是给没有显示在初始化列表初始化的成员使用的。
2024-10-24 21:47:22
1132
15
原创 C++——类和对象(二)
class STpublic:perror("malloc申请空间失败");return;_top = 0;private:这里我们可以看见,当我们书写栈的构造函数的时候,我们就需要创造空间,而不是像内置类型那样单纯的传值,这样我们的软件不会自己形成默认构造函数,需要我们自己书写。class STpublic:perror("malloc申请空间失败");return;_top = 0;private://创建一个新的类class NEW。
2024-10-08 18:04:58
1101
6
原创 C++----类和对象(一)
类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或 者成员函数。• C++中struct也可以定义类,C++兼容C中struct的用法,同时struct升级成了类,明显的变化是 struct中可以定义函数,⼀般情况下我们还是推荐用class定义类。• 定义在类面的成员函数。
2024-09-30 18:45:53
823
14
原创 C++入门基础
引用不是新定义⼀个变量,而是给已存在变量取了⼀个别名,编译器不会为引用变量开辟内存空间, 它和它引用的变量共用同⼀块内存空间。比如:水壶传中李逵,宋江叫"铁牛",江湖上人称"黑旋风";林冲,外号豹子头;类型& 引用别名 = 引用对象;int a = 0;// 引⽤:b和c是a的别名int& b = a;int& c = a;// 也可以给别名b取别名,d相当于还是a的别名int& d = b;++d;// 这⾥取地址我们看到是⼀样的。
2024-09-30 11:44:24
1253
1
原创 C++——初步认识C++和namespace的用法
这里我定义了两个名字为sun的域,但是当我调用的时候,他会找到含有这个函数的域并且调用。
2024-09-21 14:34:23
1069
9
原创 数据结构——二叉树的介绍
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。有一个特殊的结点,称为根结点,根结点没有前驱结点 除根结点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<= i <= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继 因此,树是递归定义的。这样便不是树。这也是树的逻辑概念。
2024-09-18 18:14:39
1158
2
原创 数据结构----栈和队列
一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。栈的插入操作叫做进栈/压栈/入栈,。栈的删除操作叫做出栈。。
2024-09-16 17:25:07
1205
6
原创 数据结构排序——归并排序递归与非递归
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有 序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为。
2024-09-13 10:35:52
319
18
原创 数据结构排序——快排的递归与非递归
进行第一次排序,并返还keyi的位置,然后在进行类似左子树的区间与右子树的区间,就像霍尔方法的一样,将key的左边,右边的范围输入到栈中,最后再取左边的区间,再进行排序,但是这时会不停的对左边进行排序,直到左边排序完成,再进行右边的排序。我们排完第一遍的时候,key的位置是已经确定的了,所以将左边与右边再次带入函数中,进行递归,直到left与right相同或大于。这个是将右边找到比key小的数字,之后让左边找到比key大的数字,让左右的交换,如果相遇就会停止,让key与他们停止的位置进行交换,这时,
2024-09-07 17:25:39
512
原创 C--四种排序方法的补充
进行交换,这时最后一个是最大的值,让end--,是为了不让下面代码的向下调整算法对我刚调整的最大值改变位置,然后用向下调整算法找到第二大的数放在了根的位置,然后交换位置后,倒数第二个便是倒数第二个最大的,依次进行,那么在数组中就会形成升序。
2024-08-31 13:01:45
581
4
原创 单链表的问题(2)
这时通过反转代码,返还的是最右边1的地址,而我们还知道开头的地址,所以通过while函数来进行比较,来得到我们所需要的结果。这里是有一个规律,如果是回文序列的话slow一定会走到 中间的右边的节点,就是如图的右边的3的节点,这里我们可以先让一个指针多走k步,这样slow与fast之间差k步,这以后都是我们要找的。这里下面用到的链表的反转,如果不太清楚可以看上一篇文章。如上图所示,当fast到NULL时,slow正好是在我们所要的倒数第三个。这里用到的反转是将4后面的反转,形成如图所示的情况。
2024-08-28 18:43:45
480
原创 数据结构——单列表的问题(1)
1.给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。在追击问题中,两人之间总会是有一些的距离,这个距离会使两人在循环里不停地绕圈,这样不方便我们判断进入循环的入口,所以我们要消除两人之间的入口。headA或headB开始就在相交的位置,如果先进行下一步,会使得判断相关的入口下移一个,导致错误。这里我们应该想一想如果相交,我们应该通过什么方式来判断?这里我们可以应用类似追击的问题的解决方式来进行答题。那么下面我们就要判断是否会有相交,如果有我们要确定相交的入口。
2024-08-28 12:08:07
420
原创 C++——单链表的详细讲解
链表是一种数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表中的节点可以在内存中不连续地存储,通过指针来连接彼此。链表可以是单向链表,双向链表或循环链表。链表的优点是可以动态地分配内存空间,插入和删除操作效率高,但查找操作效率较低。
2024-05-16 21:12:43
1634
2
原创 C++——详解顺序表
顺序表是一种线性表的存储结构,它是由一组连续的存储单元(通常是数组)依次存储线性表中的元素,元素之间的顺序关系由它们在存储空间中的相对位置来表示。
2024-05-14 22:04:37
1342
4
原创 C++——文件操作的讲解
我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输⼊输出 操作各不相同,为了方便程序员对各种设备进行方便的操作,我们抽象出了流的概念,我们可以把流想象成流淌着字符的河。C程序针对文件、画面、键盘等的数据输入输出操作都是通过流操作的。⼀般情况下,我们要想向流里写数据,或者从流中读取数据,都是要打开流,然后操作。那为什么我们从键盘输⼊数据,向屏幕上输出数据,并没有打开流呢?那是因为C语言程序在启动的时候,1.stdin-标准输⼊流。
2024-04-13 17:14:09
2640
8
原创 C++——删除指定的数字
2.我们会遇到一种情况,就是你输入的内容中有多个你要删除的数字,continue可以使我们跳过后面的内容,进入下一个循环,这便会出现,假如我的a[i]与b相等,那么便不会输出,当我们遍历完所有数组时,我们不要的数字便会被删除。1.我们看到在输入时会有空格,那么我们用数组的话也应有空格,但是我们可以用cin或scanf来输入,输入时他不会理会空格,只会输入你要的数字,这便于我们让数组后面的输出。第二行输入N个整数,输入用空格分隔的N个整数。输出为一行,删除指定数字之后的序列。
2024-03-30 12:53:58
922
4
原创 C++——浮点与整数在内存中的储存
IEEE754规定,在计算机内部保存M时,默认这个数的第⼀位总是1,因此可以被舍去,只保存后⾯的xxxxxx部分。,由于规定正数部分必须为1,即将⼩数点右移1位,则为1.0*2^(-1),其阶码为-1+127(中间值)=126,表⽰为01111110,⽽尾数1.0去掉整数部分为0,补⻬0到23位。这时,浮点数的指数E等于1-127(或者1-1023)即为真实值,有效数字M不再加上第⼀位的1,⽽是还原为0.xxxxxx的⼩数。(有符号整数而言最高位是符号位,正数是0,负数是1)其他位将0变为1,将1变为0。
2024-03-24 13:28:06
944
2
原创 C++——计算机的大小端判断方法
我想要知道他怎样保存,我可以只取一个字节看看是0x44还是0x11来确定大小端,那么变用到了强制类型转换(char*),然后返回b的值。我在这个i已经附上初值那么他有以下两种保存方式(一个小方块是一个字节)
2024-03-23 13:26:07
230
1
原创 C++ 中strncat strncpy strcat strcpy的讲解以及如何自我实现
如果要将一个字符串与另一个字符串拼接,那么我要找到我要从哪里开始拼接,所以我变要找到被拼接的字符串的末尾如上面举例中abcd的末尾是d。直到遇到下一个字符串的\0,便停止循环。我们都知道字符串的最后一定会有一个'\0'作为最后的终止符,那么我们便以他为终点来进行,这里我用了while循环来一个一个的传递值来完成拷贝但是别忘了最后要在a最后面加上'\0'。因为是先判断后开始拷贝,所以当b为\0时,会跳出循环,使得a的最后没有\0。strcpy是字符串的复制,可以将a的字符串的内容拷贝到b里面。
2024-03-23 12:14:02
337
1
原创 C++——斐波那契数列的递归与非递归解法
a为斐波那契数列的前面的数,如5=3+2中,a便是其中的2,b便是其中的3,但在算完后要a来接替b原来的位置(如a要接替这个例子中的3)。那么便需要一个容器来在计算前接收b的值(此编程的c)从而来保持两个连续。我们知道斐波那契数列是1,1,2,3,5,8,13,21......来进行的可知是n=(n-1)+(n-2)。那么在n>2时用递归来不断套用上面所列的公式,直到n=1或n=2为止,到达结束条件。
2024-01-25 12:13:59
510
1
原创 C++——汽水问题
3.kong=kong/2,计算的是我换完后喝光再剩下的空瓶,kong%2求得是我换完后我还留下的不够我再去换汽水的空瓶,这样再次构成的空瓶。已知1瓶汽⽔1元,2个空瓶可以换⼀瓶汽⽔,输⼊整数n(n>=0),表⽰n元钱,计算可以喝多少汽⽔。2.已知每2个空瓶子可以换一个,那么就可知循环的条件是空的瓶子应该大于或等于2。1.先通过计算一共可以买多少汽水以及多少个空瓶。
2023-12-21 18:07:13
775
原创 C++——有序合并求法2
一 :先通过循环来比较两个数组的数从头开始比较,输出较小的(此处默认为两个数组从小到大排) while的判断用i<n&&j<m是为了让一个数组输入完后停止循环。后面两个循环是为了输出那些还没完全输完的数组。在这个例子中,第一个数组会先输完,从而需要后面的循环来输入另一个(这个只是举例,并没有完全输入10个数)
2023-12-08 19:14:54
344
原创 C++——二分查找的函数写法
第二种我是设定没有返回值, 是直接来输出有或没有,这样是一条龙函数,包含输入,而第一种,我们的函数只是用来判断是否有这个数,不能输入,需要再设立数组和输入的数的变量,并将这些数输入到函数的形参中(即arr[]与key,虽然这两个形参与我们main内的一样,但并不冲突,可以将这些形参换成别的)第一种方法:让其通过返回值得方法来确定是否查找到这个数,如果有就输出他的下标,没有就输出-1,通过不断减半的方法来确定,但运用这种方法是要确定他是有序的(如:是从小到大排序或是都是从大到小排序。
2023-12-08 18:28:51
416
原创 C++:100-200素数的求法及一些优化方法
sqrt(i)是对i的求根,因为如果不是素数的话,两个根会在sqrt(i)两侧或者就是sqrt(i),如160,求根就是40。这样减少时间,减少空间。优化2:因为偶数一定不是素数,所以找奇数,可以减少空间。(改成:for(i=101;优化1:我们可以将可以改成j<=sqrt(i),因为两个数才可以相乘为i,且这两个整数一定小于i。这样是我们的一种很好想到的求法,但是在这基础上我们可以进行优化。
2023-12-07 17:51:50
550
1
原创 c++合并题的一种解法
可以将这些数字都输入到一个数组中,数组的空间大小就是n+m,然后再通过数组内部的排序来解决。(冒泡排序的外循环次数是数组总长度-1,即如图中的m+n-1,而内部循环的次数是外循环次数再减去循环的轮数。即如图所示中的m+n-1-i。第一行包含两个正整数n, m,用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。第二行包含n个整数,用空格分隔。
2023-12-03 13:55:05
409
1
原创 我对未来的打算
我是一个23届的计算机新生,我就读于山东财经大学,我希望能通过编程获得我想要的成就,去获得我想要的人生,我希望通过自己的每天练习编程能力,刷题,听别人的课等方式来提升自己的能力,我希望每周来练习编程的时间不少于40个小时。我最想进入的IT公司是腾讯。
2023-11-20 18:14:47
82
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人