- 博客(38)
- 收藏
- 关注
原创 【C++融会贯通】多态
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了 Person。Person对象买票全价,Student对象买票半价。必须通过基类的指针或者引用调用虚函数被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写在虚函数的后面写上 =0 ,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口 类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生 类才能实例化出对象。
2024-10-26 13:31:55 1085 84
原创 【C++融会贯通】继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。public:protected:// 姓名// 年龄// 继承后父类的Person的成员(成员函数+成员变量)都会变成子类的一部分。这里体现出了//Student和Teacher复用了Person的成员。
2024-10-23 18:04:05 946 58
原创 【C++驾轻就熟】priority_queue和容器适配器的深入了解及模拟实现
优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元 素)。优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特 定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。
2024-10-19 21:14:09 1088 82
原创 【C++驾轻就熟】stack&queue的深入了解及模拟实现
stackstack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行 元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定 的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下 操作:empty:判空操作back:获取尾部元素操作。
2024-10-19 17:04:27 1086 54
原创 【C++驾轻就熟】list深入了解及模拟实现
list介绍文档list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。
2024-10-12 16:58:23 1303 58
原创 【C++驾轻就熟】vector深入了解及模拟实现
erase删除pos位置元素后,pos位置之后的元素会往前搬移,没有导致底层空间的改变,理论上讲迭代 器不应该会失效,但是:如果pos刚好是最后一个元素,删完之后pos刚好是end的位置,而end位置是 没有元素的,那么pos就失效了。解答:第一个main函数错误,第二个main函数正确,因为erase()函数返回的就是删除元素后面元素位置的迭代器,++it会导致跳过一个元素,如果最后一个元素是偶数还会导致程序崩溃。以下代码的功能是删除vector中所有的偶数,请问那个代码是正确的,为什么?
2024-10-06 19:30:00 1451 89
原创 【Linux的那些事】shell命名及Linux权限的理解
一、shell命令以及运行原理Linux严格意义上说的是一个,我们称之为“核心“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。
2024-10-06 08:30:00 1063 69
原创 【C++驾轻就熟】string类以及string类的模拟实现
C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数, 但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。 sring类的文档介绍总结:在使用string类时,必须包含#include头文件以及using namespace std; 2. string类对象的容量操作注意:注意: 上面已经对string类进行了简单的介绍,大家只要能够正常使用即可。在面试中,面试官总喜欢让学
2024-09-23 08:23:05 1022 86
原创 【C++驾轻就熟】模板
class 类模板名// 类内成员定义// 动态顺序表// 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public:, _size(0){}// 使用析构函数演示:在类中声明,在类外定义。~Vector();// 注意:类模板中函数放在类外进行定义时,需要加模板参数列表。
2024-09-23 08:22:40 1123 45
原创 【C++登堂入室】C&C++内存管理
int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构//造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;free(p5);return 0;
2024-09-18 17:11:05 1218 74
原创 【C++登堂入室】类和对象(中)——类的6个默认成员函数
默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝。
2024-09-12 08:27:53 1471 70
原创 【C++登堂入室】类与对象(上)
/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字ClassName为类的名字{}中为类的主体注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。类的两种定义方式:1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。注意:不是所有的函数都会转成内联函数在日常的的练习中,我们通常用第一种,但在工作中还是尽量使用第二种。
2024-09-12 08:26:05 1045 59
原创 【C++初窥门庭】C++入门(二)
在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的 是一直没有人去使用它,大家可思考下为什么?C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一 个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。【注意】 使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto的实际类型。
2024-09-05 21:56:36 1312 69
原创 【C++初窥门庭】C++入门(一)
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。在这我就随便定义了一个命名空间域lxp// 命名空间中可以定义变量/函数/类型namespace lxp//这个名字可以随便取,没有特殊的要求,int i = 10;int val;//命名空间可以嵌套int a;int b;int c;int d;//同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
2024-09-05 21:55:51 1338 33
原创 数据结构之排序(二)
1. 冒泡排序是一种非常容易理解的排序2. 时间复杂度:O(N^2)3. 空间复杂度:O(1)4. 稳定性:稳定1. 快速排序整体的综合性能和使用场景都是比较好的,所以才敢叫快速排序2. 时间复杂度:O(N*logN)3. 空间复杂度:O(logN)4. 稳定性:不稳定1. 归并的缺点在于需要O(N)的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题。2. 时间复杂度:O(N*logN)3. 空间复杂度:O(N)4. 稳定性:稳定。
2024-08-25 11:40:58 1630 64
原创 数据结构之排序(一)
1. 元素集合越接近有序,直接插入排序算法的时间效率越高2. 时间复杂度:O(N^2)3. 空间复杂度:O(1),它是一种稳定的排序算法4. 稳定性:稳定1. 希尔排序是对直接插入排序的优化。2. 当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就 会很快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。
2024-08-25 10:49:40 941 41
原创 非线性表之堆的实际应用和二叉树的遍历
非线性链表之树结构和堆的代码实现-CSDN博客学习二叉树结构,最简单的方式就是遍历。所谓二叉树遍历(Traversal)是按照某种特定的规则,依次对二叉 树中的节点进行相应的操作,并且每个节点只操作一次。访问结点所做的操作依赖于具体的应用问题。遍历 是二叉树上最重要的运算之一,也是二叉树上进行其它运算的基础。按照规则,二叉树的遍历有:前序/中序/后序的递归结构遍历:1.前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点的操作发生在遍历其左右子树之前。2.
2024-08-10 20:56:03 1381 48
原创 非线性链表之树结构和堆的代码实现
堆可以被看作是一个可以被视作一棵完全二叉树的数组对象,即是一种顺序存储结构的完全二叉树。堆的物理结构本质上是顺序存储的,是线性的。
2024-08-10 19:31:46 856 38
原创 线性链表之栈、队列的代码实现
栈:栈是一种后进先出(LIFO, Last In First Out)的数据结构。它只允许在栈顶进行添加(push)或删除(pop)元素的操作。这意味着最后添加到栈中的元素将是第一个被移除的。
2024-08-03 22:38:30 1155 37
原创 顺序表和单链表的代码实现
需要代码并且需要运行结果的可以进入链接自行领取。顺序表:是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。链表:是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表 中的指针链接次序实现的。
2024-07-29 14:17:24 402 7
原创 C语言指针运用
1.指针就是个变量,用来存放地址,地址唯一标识一块内存空间。2.指针的大小是固定的4/8个字节(32位平台/64位平台)。3.指针是有类型,指针的类型决定了指针的+-整数的步长,指针解引用操作的时候的权限。
2024-05-30 16:40:01 495
原创 5-23C语言刷题
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
2024-05-23 22:45:10 487 2
原创 C语言日常刷题:序列中删除指定数字
有一个整数序列(可能有重复的整数),现删除指定的某一个整数,输出删除指定数字之后的序列,序列中未被删除数字的前后位置没有发生改变。
2024-05-13 21:07:04 501 3
原创 适合初学者C语言的二分查找法
/ right位置的数据可以取到。else if (arr[mid] < key)// key大于中间位置数据,说明key可能在右半侧,需要改变左边界。if (arr[mid] > key) // key小于中间位置数据,说明key可能在左半侧,需要改变右边界。// right位置的数据可以取到,因此right=mid-1。// left位置的数据可以取到,因此left=mid+1。while (left
2024-05-05 15:17:47 411 2
原创 c语言基础猜数字游戏
/每一次的随机数初始化。printf("********0.退出游戏****\n");printf("猜小了,请重新选择\n");printf("猜大了,请重新选择\n");printf("恭喜你,猜对了\n");printf("请重修选择\n");printf("请输入你猜的数字>:");printf("退出游戏\n");//vs2022版本的编辑器。
2024-04-29 20:06:16 424 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人