- 博客(105)
- 收藏
- 关注
原创 【C++】构造函数和析构函数第二部分(拷贝构造函数)--- 2023.9.28
用一句话来描述为拷贝构造即 “用一个已知的对象去初始化另一个对象public:Maker()cout << "无参构造函数" << endl;a = 20;cout << "拷贝构造函数" << endl;a = m.a;//打印函数private:int a;Maker m1;好!按照老样子,接下来开始详细讲解每行代码的用处,以及为什么这样写!Maker m1;//首先实例化一个对象,并且该对象名为m1。//通过对象m1来调用Maker类中的printMaker()方法。
2023-09-28 21:33:08 201
原创 看完这篇文章你就彻底懂啦{保姆级讲解}-----(LeetCode刷题704、35、34数组二分查找) 2023.4.17
不进来看你会后悔的~~~
2023-04-17 13:27:53 2790
原创 队列的链式存储--- 2021.10.27
上一讲链接:队列的基本概念— 2021.10.8队列的链式存储:什么叫队列的链式存储呢?我们在上一讲都知道队列的结构特点,那么我们可不可以通过链表来实现栈,从而实现了队列的链式存储。那么接下来我们一起来探讨吧!!!那我们现在先思考一个问题:链表的头节点是做队头还是做队尾?由于队列具备先进先出的特性,所以我们在插入数据和删除数据时总是会从队头出,从队尾入。所以链表的头节点做队头比较合适。接下来就开始根据代码具体分析://初始化队列LinkQueue init_LinkQueue(){ s
2021-10-27 16:57:11 142
原创 类的封装--- 2021.10.19
封装是什么?我们都知道C++有三大特性,分别是继承、多态和封装。至于继承和多态我会在之后的文章中进行讲述,在本讲中我们只讲类的封装。在上一讲中,我们论述了类是什么,那么我们思考下封装又是什么呢?首先封装是把属性(变量) 和 方法(函数) 封装到类内,然后给这些数据赋予权限。我们可以想象下,在类中有我们定义的变量,也有我们定义的函数,并且每个变量和每个函数都会有其权限,决定与类外是否可以成功调用该变量和该函数。权限又分为三种权限状态,分别是公有、私有和保护权限。顾名思义,公有即类外可以访问,私
2021-10-19 11:33:09 476
原创 类和对象的概念--- 2021.10.19
类和对象是什么?首先我们在C语言中常常会使用到结构体,在结构体中我们可以定义变量,从而达到优化代码的效果。在前面几篇文章中我们也提到过C++对C语言其实进行了一定程度的优化,例如结构体,在C++中用类来替换掉结构体,突出改变的一点是在类中除了可以定义变量还可以定义函数,这个特性是在C语言中不支持的。所以类是我们自定义的数据类型,是在C语言的结构体基础上进化而成的。具体形式可以参考下面代码:class Maker//这个是类{public: int a;//成员属性(成员变量) void fun
2021-10-19 10:32:58 69
原创 队列的顺序存储--- 2021.10.8
上一讲链接:队列的基本概念— 2021.10.8队列的顺序存储:什么叫队列的顺序存储呢?我们在上一讲都知道队列的结构特点,那么我们可不可以通过数组或者在下一讲会提到的链表来实现栈,从而实现了队列的顺序存储。那么接下来我们一起来探讨吧!!!那我们现在先思考一个问题:数组首地址是做队头还是做队尾?其实我们数组首地址不管是做队头还是队尾,我们最终都需要访问到队头元素,访问完后继续访问下一个元素,直到访问到队尾元素为止,所以在队列中数组首地址是做队头的。接下来就开始根据代码具体分析://初始化队列
2021-10-08 16:12:55 115
原创 队列的基本概念--- 2021.10.8
队列是什么?首先队列属于先进先出的数据结构,那什么叫先进先出呢?为了让大家更好的理解,这里给大家举一个生动的例子:我们在食堂打饭时,往往会进行排队,在这个队伍的首端也就是第一个打饭的,往往打完后会第一个出来,同理最后一个打饭的即最后一个出来。这就是先进先出的方式,即我们本讲提到的队列。同时为了让大家更好的了解该数据结构,特意给大家做了一张图供大家观看。由上图可知,我们可以类似于上述提到的食堂打饭的示例,即第一个打饭的该操作为入队,打完饭出来该操作叫做出队,其他队列元素以此类推。由于入队操作是从该队
2021-10-08 14:54:24 191
原创 函数重载及C++调用C语言的函数--- 2021.10.8
函数的重载在C语言中,我们常常会遇到给不同函数取名字的困扰,有的程序猿们可能图个方便就直接在后面加1,2,3以此类推。例如在已经创建好的test函数的基础上,还会有test1、test2、test3等等。虽然不影响最终使用效果,但是其实该代码并不友好。所以在C++中为了解决这个问题,提出了函数的重载。重载的原理函数的重载即允许函数名相同。函数的重载条件:同一个作用域,参数的个数不同,参数的顺序不同,参数的类型不同。但是此时会有一种特殊情况,就是函数重载和函数的默认参数一起使用时,需要注意二义性的问
2021-10-08 11:40:08 126
原创 函数传递参数的三种方式--- 2021.9.6
函数传递参数的三种方式:一般我们进行函数之间传递时,即入口参数传递时一般有三种传递方式,分别是值传递、指针传递和引用传递。接下来会一一进行讲解,先上完整代码:#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;//值传递void swap(int a, int b){ int tmp = a; a = b; b = tmp;}//指针传递void swap2(int *a, int
2021-09-06 14:58:38 447
原创 引用的使用场景--- 2021.9.6
上一讲链接:C++中的数组引用、指针引用— 2021.9.2引用的使用场景:在日常的使用过程中,一般我们使用引用的场景分为两种情况,分别是引用作为函数的参数和引用作为函数的返回值。接下来会一 一进行分析。先上完整代码:#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;//1.引用作为函数参数void func(int& a, int& b){ int sum = a +
2021-09-06 10:54:11 249
原创 栈的链式存储 --- 2021.9.3
上一讲链接:栈的顺序存储 — 2021.9.3栈的链式存储:什么叫栈的链式存储呢?我们在上一讲讲解了栈的顺序存储,自然而然,我们接下来可以进行栈的链式存储设计。那么接下来我们一起来探讨吧!!!为了让大家更好的理解,特意画了一张图供大家观看:那我们现在先思考一个问题:链表头节点是做栈顶还是做栈底?正常情况下链表头节点是要做栈顶,原因是当做栈顶时,由于栈的先入后出的原则,在入栈时只需要进行头插即可,出栈时只需要进行头删即可,此时就不需要去维护链表的尾节点了。接下来就开始根据代码具体分析:/*
2021-09-03 18:00:43 127
原创 栈的顺序存储 --- 2021.9.3
上一讲链接:栈的基本概念— 2021.9.2栈的顺序存储:什么叫栈的顺序存储呢?我们在上一讲都知道栈的结构特点,那么我们可不可以通过数组或者在下一讲会提到的链表来实现栈,从而实现了栈的顺序存储。那么接下来我们一起来探讨吧!!!为了让大家更好的理解,特意画了一张图供大家观看:那我们现在先思考一个问题:数组首地址是做栈顶还是做栈底?首先我们都知道数组是连续的,那么如果数组首地址做栈顶的话,那么当第一个数组元素入栈后,作为该栈的栈顶,那么当第二个数组元素入栈后,由于栈的先进后出的原则和数组连续的,
2021-09-03 11:05:20 115
原创 栈的基本概念--- 2021.9.2
在面试过程中,总是会涉及到基于链表或者数组的算法设计,其中针对于栈和数组又衍生出一种数据结构,即我们本文将会提到的“栈”。接下来我会详细讲解。栈是什么?首先栈属于先进后出的数据结构,那什么叫先进后出呢?首先我们先把栈想象成一种容器,该容器和我们平常生活中使用的水杯一样,杯底是封闭的,只会留有杯口。那么此时栈要存放第一个数据,随后第二个数据依次往杯口存放,但是最后想要从杯口拿取数据时,往往第一个数据是最后一个出来的,即理论意义上的先进后出。自然而然,流进杯口和流出杯口相对应的有专业术语,即入栈和出栈。
2021-09-02 20:04:15 192
原创 C++中的数组引用、指针引用--- 2021.9.2
引用的本质:我们在讲解引用之前需要知道为什么C++中会单独提出引用这个概念,在前面也提到在C++从一定角度上是C语言的升级版,其实引用时和C语言中的指针一样的功能,并且使得语法更加简洁。既然提到和指针功能相同,那么引用的功能其实就是给空间取别名。具体我们进行代码解析:#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;void test01(){ int a = 10; int& b
2021-09-02 11:20:25 900
原创 C/C++中的const关键字辨析--- 2021.8.31
参考文章链接:内存分布、内存处理函数 — 2021.4.16C语言中的const众所周知,const关键字的作用将变量变为常量,从而使得不能被直接修改。但是该关键字const在C和C++中的区别在哪呢,我们在这篇文章中会具体分析。先上代码:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h>const int a = 10;void t
2021-08-31 14:34:45 152
原创 链表删除、清空和销毁-----2021-08-30
上一讲链接:链表初始化、插入、遍历功能实现----2021-08-17链表的删除和销毁:在前几讲中我们分别进行了链表的初始化、插入和遍历。那么接下来我们一起来探讨下链表的删除、按照值来删除链表中数据和销毁。链表的删除(按位置删除)先上代码:void removeByPos_LinkList(LinkList list,int pos){ if(list==NULL) { return; } struct LList * mylist = list; if(pos<0 ||
2021-08-30 17:56:09 2039 1
原创 链表初始化、插入、遍历功能实现----2021-08-17
单向链表:在前几讲中,我们对动态数组进行了讲解,在讲解链表之前我觉得还是需要清楚的知道动态数组和链表之间的区别和联系,为之后对链表的操作打好基础。首先,动态数组是在堆区开发的一个连续可拓展的内存区域,链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。至于链表内部的组成结构我们后面再进行讲解。所以这里有必要先对这两者之间进行优点和缺点的比较。动态数组的优点:无需为线性表中的逻辑关系增加额外的空间。可以快速的获取表中合法位置的元素。动态数组的缺
2021-08-30 10:13:39 2579 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人