C++
文章平均质量分 93
C++的成神之路
sdm070427
不断学习,增长知识!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
用红黑树封装map和set
本文详细介绍了红黑树的实现及其在STL容器set和map中的应用。主要内容包括:1)红黑树节点的模板化设计,使其能同时支持set(存储key)和map(存储pair);2)通过仿函数KeyOfT统一提取节点中的key值,解决不同类型数据比较问题;3)迭代器实现,包括operator++和operator--的中序遍历逻辑;4)红黑树插入操作的完整实现,包括颜色调整和旋转处理;5)set和map的封装,通过模板参数控制key的不可修改性;6)map中operator[]的实现原理。最后给出了完整的红黑树、se原创 2025-11-24 23:54:12 · 895 阅读 · 9 评论 -
《红黑树的平衡密码:不追求完美,却赢了性能^~^》
红黑树是一种自平衡二叉搜索树,通过颜色标记和旋转操作维持平衡。其核心规则包括:节点为红或黑、根节点为黑、无连续红节点、各路径黑节点数相同。插入时通过变色和旋转(单旋或双旋)调整结构,保持平衡。查找效率为O(logN),验证平衡需检查颜色规则和路径黑节点数。红黑树通过限制最长路径不超过最短路径2倍,避免退化为单支树,确保高效操作。原创 2025-10-19 20:45:59 · 619 阅读 · 14 评论 -
《二叉树“防塌”指南:AVL 树如何用旋转 “稳住” 平衡?》
AVL树是一种平衡二叉搜索树,通过控制左右子树高度差不超过1来保证高效查找(O(logN))。本文详细介绍了AVL树的结构、插入操作及四种旋转方式(右单旋、左单旋、左右双旋和右左双旋),并提供了检查平衡性、计算高度、节点数量和中序遍历等功能的实现代码。与普通BST相比,AVL树能有效避免退化成单支树的情况,确保操作效率。文中还包含了平衡因子更新规则和异常处理机制,为理解和实现AVL树提供了完整指导。原创 2025-10-19 20:45:56 · 998 阅读 · 12 评论 -
C++:set和map详解版
本文主要介绍了C++ STL中的关联式容器set和map,重点讲解了它们的基本特性、迭代器、构造方法以及增删查操作。set是基于红黑树实现的平衡二叉搜索树,具有自动排序和去重功能,支持高效查找、插入和删除操作。map则是key-value结构,同样基于红黑树实现,支持通过key快速查找和修改value。文章还详细介绍了它们的插入方法、删除操作、查找功能以及特殊函数如lower_bound和upper_bound的使用。此外,还对比了set和multiset的区别,以及map的特殊操作符[]的实现原理。最后通原创 2025-10-11 14:06:46 · 1019 阅读 · 16 评论 -
C++--二叉搜索树
本文介绍了二叉搜索树(BST)的基本概念和实现方法。BST是一种左子树节点值均小于根节点,右子树节点值均大于根节点的数据结构,查找效率在O(log2N)到O(N)之间。文章详细讲解了BST的节点结构、插入(insert)、中序遍历(InOrder)、查找(Find)和删除(Erase)等操作的具体实现,并分析了各种情况下的处理逻辑。此外,还介绍了BST在key/value应用场景中的扩展使用,如通讯录、停车场系统等,展示了如何通过key索引value。文章强调BST不允许修改key值以避免破坏结构,并提供了原创 2025-10-06 20:39:32 · 952 阅读 · 11 评论 -
C++多态详解
文章摘要:本文深入探讨了C++多态的实现原理与关键概念。首先分析了多态的实现条件,包括基类指针/引用调用虚函数和虚函数重写的要求。重点讨论了虚函数重写中的特殊问题:协变(允许返回派生类指针)和析构函数重写(需统一处理函数名)。介绍了override和final关键字的作用,对比了重载、重写和隐藏的区别。解析了抽象类和纯虚函数的概念,通过形状类示例说明其应用。详细阐述了多态底层原理,包括虚函数表指针(_vfptr)和虚函数表的结构,展示了父子类虚函数表的差异。最后说明虚函数表存储于常量区。原创 2025-10-01 17:26:18 · 787 阅读 · 2 评论 -
《当子类遇见父类:一场 C++ 继承的奇妙旅程》
本文系统介绍了C++继承机制,包括访问限定符、继承方式、派生类成员函数等核心概念。重点分析了赋值兼容转换、作用域隐藏规则、派生类默认成员函数的实现原理。通过实例讲解了如何实现不可继承类、友元关系继承、静态成员处理等特殊场景。深入探讨了单继承、多继承和菱形继承问题,提出了虚继承解决方案。最后对比了继承(is-a)和组合(has-a)的适用场景,指出组合能更好保持封装性。全文通过代码示例演示了继承体系中的各种特性,为理解C++面向对象编程提供了全面指导。原创 2025-09-25 21:04:08 · 886 阅读 · 0 评论 -
模板进阶:非类型参数详解与编译链接机制
本文介绍了C++模板中的非类型模板参数和模板特化。非类型模板参数允许使用常量作为模板参数,用于定义静态数组大小等场景,相比宏更加灵活。模板特化分为函数模板特化和类模板特化,可针对特定类型进行特殊处理。函数模板特化需遵循固定格式,但容易出错;类模板特化包括全特化和偏特化。文章还分析了模板分离编译导致链接失败的原因,并给出两种解决方案:显式实例化或将模板定义直接写在头文件中。这些技术能提升代码的灵活性和可维护性,但需注意使用细节。原创 2025-09-21 15:05:26 · 593 阅读 · 0 评论 -
《C++ 容器适配器:stack、queue 与 priority_queue 的设计》
本文介绍了C++中栈、队列和优先级队列的适配器实现方式。通过模板参数传入底层容器(如vector、list或deque),可以灵活构建不同特性的数据结构:栈默认使用deque实现,队列也用deque适配,避免vector头删效率低的问题。优先级队列基于堆实现,默认使用vector容器和大堆排序。重点讲解了仿函数的应用,通过Less和Greater仿函数类实现对比较逻辑的封装,使得优先级队列可以灵活切换大小堆模式而无需修改核心代码。这种适配器模式充分利用现有容器特性,仅暴露特定接口,既简化了实现又保证了灵活性原创 2025-09-14 18:00:12 · 831 阅读 · 1 评论 -
《链表的优雅封装:C++ list 模拟实现与迭代器之美》
摘要: 本文详细分析了C++中list的实现原理及其特性。list底层采用双向链表结构,相比数组结构的vector和string,其优点包括:插入/删除操作仅需调整指针(时间复杂度O(1)),迭代器稳定性(插入/删除不导致其他迭代器失效)。缺点是无法随机访问(需遍历),且迭代器需封装指针以支持++、*等操作。 实现分为三类: 节点类(list_node):存储数据及前后指针; 链表类(list):维护哨兵节点_head及大小_size,提供push_back、insert等方法; 迭代器类:封装节点指针,重原创 2025-09-10 19:53:02 · 630 阅读 · 1 评论 -
《从模板初阶到 vector 实战:解锁 C++ 容器的底层逻辑》
这篇文章主要介绍了C++模板编程的概念和应用。首先解释了模板的作用是解决代码复用和泛型编程问题,通过函数模板和类模板实现。函数模板通过隐式实例化自动推导类型参数,类模板则需要显式实例化。文章详细讲解了vector容器的实现,包括迭代器、构造函数、插入删除等操作,重点分析了迭代器失效问题及解决方法。最后指出对于包含动态资源的类型,必须使用深拷贝而非简单的memcpy复制。全文通过具体代码示例展示了模板编程的实际应用和注意事项。原创 2025-09-01 20:13:37 · 944 阅读 · 0 评论 -
《不止“字符串”:C++string类的设计哲学与使用指南》
本文介绍了C++标准库中的string类及其常用成员函数实现。主要内容包括:1. 三种打印字符串方式(下标、迭代器、范围for);2. 构造函数、析构函数、拷贝构造和赋值运算符重载的实现;3. 容量相关函数(size/capacity/reserve/resize)和修改函数(push_back/append/insert/erase);4. 字符串操作函数(find/substr/c_str);5. 非成员函数(流运算符重载/swap/getline)。重点讲解了string类的底层实现原理和深拷贝问题,原创 2025-08-26 14:51:12 · 950 阅读 · 2 评论 -
内存管理c++
仅回收内存,不清理对象),new,delete会在申请空间和自动调用构造函数完成对象的初始化,释放空间之前会调用析构函数完成对象成员资源的释放。operator new实际上通过malloc来申请空间,当malloc申请成功时直接返回,申请失败则抛异常,仅负责分配内存,不初始化对象;delete和free类似,注意new/delete申请释放的是单个元素的空间,new[]/delete[]申请和释放的是连续的内存空间。局部数据,用一会就销毁,栈帧销毁就销毁,长期使用的,不修改的数据,动态申请的数据。原创 2025-08-16 13:42:42 · 884 阅读 · 0 评论 -
类和对象-下
文章摘要:本文介绍了C++中的构造函数初始化列表与体内赋值的区别,重点分析了三种必须使用初始化列表的情况:const成员、引用成员和无默认构造的自定义类型成员。同时讲解了static成员的特性、友元机制、内部类概念以及匿名对象的使用场景。最后讨论了编译器对对象拷贝的优化策略,包括临时对象的产生和传值优化的处理方式.原创 2025-08-12 15:26:14 · 457 阅读 · 1 评论 -
类和对象(上)
本文介绍了C++中类的定义与使用要点:1.类由成员变量和成员函数组成,使用class/struct关键字定义;2.class默认私有访问,struct默认公有;3.类中成员变量仅声明,实例化时才分配内存;4.成员函数存储在代码段,通过this指针区分不同对象;5.介绍了访问限定符、内存对齐、空类大小等特性;6.对比了C/C++在类定义上的差异,如C++不需要typedef。重点阐述了this指针的作用机制,它是连接共享函数代码与独立对象数据的关键。原创 2025-08-04 17:35:29 · 875 阅读 · 0 评论
分享