
C++
文章平均质量分 93
C++代码练习
LongQ30ZZ
这个作者很懒,什么都没留下…
展开
-
C++11
很像,编译后从汇编指令层的角度看,压根就没有 Lambda和范围for这样的东西。原创 2025-01-23 20:48:41 · 824 阅读 · 0 评论 -
红黑树的介绍
p变成课这颗树新的根,这样⼦树黑色结点的数量不变,没有连续的红色结点了,且不需要往上更新,因为p的父亲是黑色还是红色或者空都不违反规则。这⾥获取最长路径和最短路径,检查最长路径不超过最短路径的2倍是不可⾏的,因为就算满足这个条件,红黑树也可能颜色不满足规则,当前暂时没出问题,后续继续插⼊还是会出问题的。c变成课这颗树新的根,这样⼦树黑色结点的数量不变,没有连续的红色结点了,且不需要往上更新,因为c的⽗亲是黑色还是红色或者空都不违反规则。如果p是g的左,c是p的右,那么先以p为旋转点进行。原创 2024-12-23 00:29:53 · 666 阅读 · 0 评论 -
AVL树的实现
因为5 < b子树的值 < 10,将b变成10的左子树,10变成5的右子树,5变成这棵树新的根,符合搜索树的规则,控制了平衡,同时这棵的高度恢复到了插⼊之前的h+2,符合旋转原则。,不断向上更新平衡因子,导致10的平衡因⼦从1变成2,10为根的树左右⾼度差超过1,违反平衡规则。1,当subLR原始平衡因子时-1时,左右双旋后parent,subL,subLR的平衡因子分别更新为1,0,0。2,当subLR原始平衡因子时1时,左右双旋后parent,subL,subLR的平衡因子分别更新为0,-1,0。原创 2024-12-19 20:54:28 · 692 阅读 · 0 评论 -
【C++】set和map的使用
1.T是set底层关键字的类型。2.set默认要求T⽀持⼩于⽐较,如果不⽀持或者想按⾃⼰的需求⾛可以⾃⾏实现仿函数传给第⼆个模版参数。3.⼀般情况下,我们都不需要传后两个模版参数。4.set底层是用红黑树实现,增删查效率是logNlogNlogN,迭代器遍历是走的搜索树的中序,所以是有序的。Key就是map底层关键字的类型,T是map底层value的类型,set默认要求Key⽀持小于比较,如果不⽀持或者需要的话可以自行实现仿函数传给第⼆个模版参数,map。原创 2024-12-17 12:47:34 · 634 阅读 · 0 评论 -
【C++】多态的介绍
多态还有两个必须重要条件:1.必须指针或者引用调用虚函数2.被调用的函数必须是虚函数。运行时多态的构成条件(虚函数实现)(1)存在继承关系:必须有基类和派生类的层次结构,派生类继承自基类。(2)虚函数声明:在基类中,将希望在派生类中重新定义的函数声明为虚函数,使用关键字virtual。例如,。(3)函数重定义:派生类对基类中的虚函数进行重新定义,函数签名(函数名、参数列表、返回值类型要和基类虚函数一致)必须相同,函数体可以不同。原创 2024-12-15 14:28:15 · 982 阅读 · 0 评论 -
【C++】继承的介绍
在C++中,继承是面向对象编程的一个重要特性。从概念上讲,继承允许你创建一个新类(派生类/子类),这个新类从一个已存在的类(基类/父类)那里获取成员变量和成员函数。继承的主要目的是代码重用和建立类之间的层次结构public:// 进校园/图书馆/实验室刷二维码进行身份认证// ...// 学习// ...protected:// 姓名// 地址// 电话// 年龄int _stuid;原创 2024-12-11 20:19:56 · 1230 阅读 · 0 评论 -
二叉搜索树
在寻找中序后继(或前驱)并替换要删除节点的值后,错误地对原要删除的节点进行了第二次删除操作,而不是对中序后继(或前驱)节点进行删除。例如,在删除一个有左子节点的节点时,只是简单地删除了该节点,而没有让其父节点指向它的左子节点。:在处理要删除的节点有两个子节点的情况时,没有正确地找到中序后继。比如,没有正确地遍历右子树去寻找最小值的节点,可能会选择一个错误的值来替换要删除的节点的值。后续的搜索、插入等操作可能会出现错误的结果,因为树不再满足左子树的值小于根节点,右子树的值大于根节点的规则。原创 2024-12-11 14:25:05 · 750 阅读 · 0 评论 -
【C++】vector的用法,一些接口的模拟实现
vector是表示大小可以改变的数组的序列容器。它就像是一个动态大小的数组,可以储存同一类型的多个元素,和普通数组相比,vector的大小的自动调整。vector在实际中非常的重要,在实际中我们熟悉常见的接口就可以。下面列出的接口是要重点掌握的。我们来模拟实现一下以上的函数。原创 2024-11-28 17:57:41 · 799 阅读 · 0 评论 -
【C++】string的模拟实现
当我们运行程序时,程序崩了,这是因为_str无参构造时,初始化的时nullptr,转为字符串打印时会直接去解引用,然后按照字符串去打印,遇到\0才会终止,这里对空指针进行解引用,导致程序崩溃。比如在 string 类的 find 函数中,当没有找到要查找的子串时,就会返回 npos。这些都是频繁调用或者是比较简单的函数,所以我们定义在类里。这里可以用运算符的复用会比较简单,只需要实现两个,其他的就都可以实现。string本质上是是一种char类型的顺序表,结构上和顺序表相似。,迭代器并不是指针。原创 2024-11-24 20:40:03 · 384 阅读 · 0 评论 -
C/C++内存管理
(1)如果申请的是内置类型的空间,new和malloc,delete和free基本类似,不同的地方是:new/delete申请和释放的是单个元素的空间,new[]和delete[]申请的是连续空间,而且new在申。它的作用域仅限于定义它的文件,和全局变量类似,在程序运行开始就分配内存,到程序结束才释放内存,只不过访问范围更受限。注意:申请和释放单个元素的空间,使用new和delete操作符,申请和释放连续的空间,使用new[ ]和delete[ ]。2.在申请的空间上执行构造函数,完成对象的构造。原创 2024-11-12 17:35:51 · 1250 阅读 · 0 评论 -
【C++】初始化列表,友元函数和static成员
3.友元类中的成员函数都可以是另⼀个类的友元函数,可以访问另⼀个类中的私有和保护成员。4.友元类的关系是单向的,不具有交换性,⽐如A类是B类的友元,但是B类不是A类的友元。原创 2024-11-11 22:53:15 · 742 阅读 · 0 评论 -
【C++】类的默认成员函数
fill:#333;color:#333;color:#333;fill:none;开始初始化和清理拷贝复制取地址重载构造函数主要完成出初始化析构函数主要完成清理工作拷贝构造函数使用同类对象初始化创建对象赋值运算符重载把一个对象赋值给另一个对象。原创 2024-11-09 22:37:14 · 1109 阅读 · 0 评论 -
C++入门基础
•定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。//命名空间里可以定义变量/函数/类型int Add(int x, int y)//整数相加的函数struct Node//定义一个结构体int val;//其中::叫做域作用限定符•namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以上。原创 2024-09-12 21:22:43 · 5496 阅读 · 0 评论