C++进阶
文章平均质量分 96
C++进阶,继承,多态,二叉搜索树,AVL树,红黑树,map/set,unordered_map/set,哈希表,C++11,异常,智能指针
Lzc-c
书到用时方恨少,事非经过不知难。
gitee:https://gitee.com/Lzc-c
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++进阶——继承
继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许我们在保持原有类特性的基础上进行扩展,增加方法(成员函数)和属性(成员变量),这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的函数层次的复用,继承是类设计层次的复用。没有继承之前public:// ...// ...protected:int _stuid;public:// ...//...protected:string _name = "张三";原创 2025-03-04 20:24:02 · 867 阅读 · 0 评论 -
C++进阶——多态
1. 必须是基类的指针 或引用调用虚函数,因为只有基类的指针或引用才能既指向基类对象又指向派生类对象。2.被调用的函数必须是虚函数,一般要完成虚函数重写/覆盖,因为重写或者覆盖了,基类和派生类之间才能有不同的函数,多态的不同形态效果才能达到。注意:派生类没有完成虚函数的重写,那么多态性仍然可以工作,但仅限于使用基类的实现。public:// show 函数没有被重写// 调用 Base::showreturn 0;原创 2025-03-07 12:25:32 · 901 阅读 · 3 评论 -
C++进阶——二叉搜索树
在我写BinarySearchTree的拷贝构造时,发现为什么,_root明明是私有的。这种设计是为了支持类的封装性和实现细节的隐藏,同时。例如:拷贝构造函数需要访问被拷贝对象的内部状态。赋值运算符需要访问右操作数的内部状态。比较运算符可能需要访问两个对象的内部状态。原创 2025-03-09 17:58:25 · 743 阅读 · 1 评论 -
C++进阶——二叉树OJ题
本文总结了二叉树相关的7个经典算法问题及解法:1. 层序遍历(BFS)使用队列按层输出节点值;2. 最近公共祖先(LCA)两种解法:子树判断法和路径记录法;3. 二叉搜索树转双向链表通过中序遍历调整指针;4. 前序+中序序列重建二叉树利用前序定位根节点,中序分割左右子树;5-7. 三种非递归遍历(前序/中序/后序)均提供两种实现:统一标记法和优化栈操作法,其中后序遍历还通过反转前序结果实现。所有解法均给出C++代码实现,涵盖队列、栈、递归等核心数据结构应用。原创 2025-03-14 11:49:55 · 1233 阅读 · 0 评论 -
C++进阶——map和set的使用
1. set的声明如下,T就是set底层关键字key的类型。2.set默认要求key支持小于比较(升序),如果不支持或者想按自己的需求走可以自行实现仿函数传给第二个模版参数。3. set底层存储数据的内存是从空间配置器申请的,如果需要可以自己实现内存池,传给第三个参 数。4. 一般情况下,我们都不需要传后两个模版参数。5.set底层是用红黑树实现,增删查效率是O(logN)。迭代器遍历走的是搜索树的中序,所以是有序。原创 2025-03-15 23:37:53 · 1189 阅读 · 3 评论 -
C++进阶——AVL树的实现
AVL 树是一种自平衡二叉搜索树,满足以下性质:它是一棵空树,或者:它的左右子树都是 AVL 树。左右子树的高度差(平衡因子)的绝对值 <= 1。原创 2025-03-17 21:36:14 · 1203 阅读 · 0 评论 -
C++进阶——红黑树的实现
红黑树是一种自平衡的二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色,可以是红色或黑色。通过对从根节点到叶子节点的路径上的节点颜色进行约束,红黑树确保没有一条路径会比其他路径长出两倍,因此它是近似平衡的。原创 2025-03-20 18:31:55 · 875 阅读 · 32 评论 -
C++进阶——封装红黑树实现map和set
(整个子树已经访问完了,如果这个子树是外面的右子树,那么外面一层的子树也访问完了,直到子树是外面子树的左子树,左子树访问完了,访问中),就访问,2. 源码中的pair的<比较,比较了key和value,但是。MySet是为了兼容MyMap,所以也要实现。),相当于外层左边的子树访问完了,然后访问中。然后更新迭代器中的节点指针,返回*this。修改RBtree中的insert返回值为。,在右子树中进行,左中右,访问。1. 这里相比源码调整一下,当左为空,表示左访问完了,就是走右中左,基本相同。原创 2025-03-22 16:48:26 · 1289 阅读 · 32 评论 -
C++进阶——哈希表的实现
乘法散列法对哈希表大小 M 是没有要求的,假设 M 为 1024,key 为 1234,A = 0.6180339887,A * key = 762.6539420558,取小数部分为 0.6539420558,M × ((A × key) % 1.0) = 0.6539420558 * 1024 = 669.6366651392,那么 h(1234) = 669。假设 P=17,M=6,a=3,b=4,则 h_34(8) = ((3 × 8 + 4) % 17) % 6 = 5。原创 2025-03-25 22:28:21 · 1195 阅读 · 41 评论 -
C++进阶——封装哈希表实现unordered_map/set
与红黑树封装map/set基本相似,只是unordered_map/set是单向迭代器,模板多传一个HashFunc。原创 2025-03-29 12:03:06 · 1230 阅读 · 43 评论 -
C++进阶——位图+布隆过滤器+海量数据处理
有一些场景下面,有。原创 2025-03-30 22:10:23 · 860 阅读 · 53 评论 -
C++进阶——C++11_右值引用和移动语义_可变参数模板_类的新功能
文章摘要:本文深入探讨了C++11引入的右值引用和移动语义机制,包括左值/右值概念、引用折叠规则、完美转发实现原理,以及可变参数模板的扩展应用。重点分析了移动构造和移动赋值的实现原理及其在STL容器emplace系列接口中的应用,通过对比传统拷贝语义与移动语义的性能差异,展示了如何利用这些特性优化资源管理。文章还介绍了类的新功能如默认移动操作、成员变量初始化、final/override等现代C++特性,并提供了详细的代码示例说明其使用场景和底层机制。原创 2025-04-10 12:24:04 · 926 阅读 · 45 评论 -
C++进阶——C++11_{ }初始化_lambda_包装器
C++11,基本实现了一切对象皆可初始化。原创 2025-04-12 10:10:46 · 1105 阅读 · 47 评论 -
C++进阶——异常
C++98中函数参数列表的后面接throw(),表示函数不抛异常,函数参数列表的后面接throw(类型1, 类型2...)表示可能会抛出多种类型的异常,可能会抛出的类型用逗号分割。,否则后面的5个资源就没释放,也资源泄漏了。如果是102号错误,这个异常不处理,出了catch子句,自动析构,再尝试发送。,这里由于异常就引发了资源泄漏,产生安全性的问题。,比如析构函数要释放10个资源,释放到第5个时抛出异常,则也。,前面申请了资源(内存、锁等),后面进行释放,但是。,(若没有移动构造,就调用拷贝构造)。原创 2025-04-13 15:42:18 · 860 阅读 · 49 评论 -
C++进阶——C++11_智能指针
什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存,一般是忘记释放或者发生异常释放程序未能执行导致的。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害普通程序运行一会就结束了出现内存泄漏问题也不大,进程正常结束,页表的映射关系解除,物理内存也可以释放。长期运行的程序出现内存泄漏影响很大。原创 2025-04-15 18:10:33 · 1253 阅读 · 67 评论
分享