《C++修炼之路》
文章平均质量分 98
《C++修炼之路》专栏带你深入C++核心。从类和对象的甜蜜期,到模板元编程的烧脑阶段,再到STL的实用主义婚姻。我们用专业而风趣的方式,剖析多态奥秘、智能指针的智慧,以及移动语义的精妙。在这里,RAII是你的贴心管家,lambda是灵活的小助手,让你写出高效又优雅的C++代码。
我不是呆头
永远保持乐观,积极,向上,沉稳.
合作+V:d1105_S
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【C++】map/set 与 unordered_map/set 的核心区别与选型
本文深度解析了C++中`map/set`与`unordered_map/unordered_set`这两类关联容器的核心区别。原创 2025-11-23 12:01:59 · 467 阅读 · 4 评论 -
【C++】解决哈希冲突的核心方法:开放定址法 & 链地址法
本文围绕哈希冲突的解决,详细介绍了开放定址法和链地址法两种核心方案,包括各自的命名空间设计、哈希函数(含字符串 BKDR 算法)、节点与哈希表结构定义,以及 find、insert、erase 等关键操作的实现逻辑,还涉及负载因子阈值触发的扩容与重哈希机制。原创 2025-11-21 09:45:00 · 827 阅读 · 16 评论 -
【C++】 STL 详解(十一)之 一棵红黑树模拟map/set
本文系统性地介绍了基于红黑树的关联容器实现过程,详细阐述了红黑树节点结构、迭代器设计、平衡调整算法等核心组件的开发,重点分析了map和set容器的封装技术及关键问题的解决方案。原创 2025-11-19 09:59:13 · 1147 阅读 · 13 评论 -
【C++】红黑树为什么比AVL快?用C++亲手实现告诉你答案
红黑树作为一种高效的自平衡二叉搜索树,通过巧妙的颜色约束规则在插入和删除时以更少的旋转操作维持树的近似平衡。本文从红黑树的核心概念出发,详细解析了其五大平衡规则和效率保证机制,并通过完整的C++代码实现展示了插入操作中的变色、单旋和双旋等平衡调整策略。与严格的AVL树相比,红黑树通过允许一定程度的高度不平衡,在实际应用中实现了更优的整体性能,成为C++ STL中map和set等关联容器的底层实现基础。原创 2025-11-18 09:50:16 · 1491 阅读 · 86 评论 -
【C++】深入解析AVL树:平衡搜索树的核心概念与实现
本文深入解析了AVL树的核心概念与实现,包括节点结构设计、平衡因子定义及其更新机制、插入操作的自下而上平衡调整策略,以及四种旋转方式(左单旋、右单旋、左右双旋、右左双旋)对保持树平衡的重要作用。同时,提供了AVL树高度计算与平衡检测的实现方法,确保每个节点的平衡因子正确维护,从而保证树在插入操作后的高效性与稳定性。通过本文内容,读者可以系统掌握AVL树的原理、实现与调试技巧,为高性能二叉搜索树的应用打下坚实基础。原创 2025-11-17 12:20:47 · 1429 阅读 · 64 评论 -
【C++】 map/multimap底层原理与逻辑详解
C++ STL中的map和multimap都是基于红黑树实现的有序关联容器,支持O(log n)的高效查找。map存储唯一键值对,提供operator[]直接访问元素,适合键唯一的场景;multimap允许键重复但不支持operator[],通过equal_range可获取重复键的所有对应值,适合一键多值的需求。两者都支持迭代器遍历、范围查找和丰富的增删改查操作,是处理有序键值对数据的核心工具。原创 2025-11-15 12:06:41 · 1218 阅读 · 61 评论 -
【C++】 set/multiset底层原理与逻辑详解
本文详细介绍了C++ STL中的两种关联式容器:`set` 和 `multiset`。这两种容器都基于平衡二叉搜索树(通常是红黑树)实现,能够自动对元素进行排序。`set` 要求元素唯一,而 `multiset` 允许重复元素。文章全面讲解了它们的构造函数、迭代器、插入删除操作、查找功能以及各种实用成员函数的使用方法。原创 2025-11-15 11:59:17 · 908 阅读 · 25 评论 -
【C++】教你学会键值对使用技巧,make_pair太香了!
本文介绍了C++中的关联式容器及其核心概念——键值对(pair)。关联式容器与序列式容器的主要区别在于其通过键(key)来高效查找、插入和删除元素,底层通常采用平衡二叉搜索树或哈希表实现。文章重点讲解了pair的结构、构造函数以及简化操作的make_pair函数。原创 2025-11-15 11:48:31 · 737 阅读 · 15 评论 -
【C++】二叉搜索树深拷贝的致命陷阱:如何用前序遍历解决90%程序员的内存崩溃难题
本文以 “Key 结构→KeyValue 结构” 为演进主线,完整实现了两种结构的非递归与递归操作(插入、查找、删除),并针对默认成员函数(拷贝构造、赋值运算符重载、析构)的深拷贝需求,设计了基于前序遍历的拷贝逻辑、“拷贝 - 交换” 的赋值技法及后序遍历的销毁逻辑,同时结合 “小区车库车牌验证”“单词拼写检查”“中英互译字典” 等实际场景,清晰区分两种结构的适用范围,为 BST 的工程化应用提供了可直接复用的代码模板与逻辑指导。原创 2025-11-14 10:59:21 · 1238 阅读 · 75 评论 -
【C++】深入拆解二叉搜索树:从递归与非递归双视角,彻底掌握STL容器的基石
二叉搜索树(BST)是一种重要的数据结构,它通过"左子树所有节点值小于根节点,右子树所有节点值大于根节点"的特性实现高效的元素组织。本文详细解析了BST的核心概念、性能特点,并分别通过非递归和递归两种方式完整实现了插入、查找、删除等关键操作,深入探讨了指针引用在递归实现中的巧妙应用,以及两种实现方式在时间复杂度、空间复杂度和适用场景上的差异。原创 2025-11-13 18:10:44 · 1349 阅读 · 47 评论 -
【C++】多态到底难在哪?虚函数表 + 动态绑定,一篇吃透底层逻辑!
本文深入解析 C++ 多态的底层逻辑,聚焦运行时多态,从概念、实现条件、虚函数机制、虚表原理到抽象类、菱形继承等场景,结合代码与内存图解,全面梳理多态的核心知识与面试考点。原创 2025-11-07 10:24:49 · 1627 阅读 · 115 评论 -
【C++】继承深度解析:继承方式和菱形虚拟继承的详解
本文系统讲解了 C++ 中的继承机制,包括单继承、多继承、菱形继承及虚拟继承,配合图解和代码示例直观展示各类继承的对象模型、内存布局及访问特点,重点说明虚拟继承如何通过共享基类实例、虚基表偏移和构造顺序,解决菱形继承的数据冗余与二义性问题。原创 2025-10-10 22:18:39 · 2258 阅读 · 88 评论 -
【C++】继承—C++的秘密武器,get父类的智慧
C++继承是通过派生类继承基类的成员,避免了代码冗余,提升了代码复用性。继承有public、protected和private三种方式,影响成员的访问权限。继承支持多态性,使得同一接口能表现出不同的行为。继承和组合各有优缺点,继承适用于“is-a”关系,而组合适用于“has-a”关系。在使用时需根据需求选择合适的方式,避免过度依赖继承,保持代码的可维护性。原创 2025-10-08 11:41:20 · 20640 阅读 · 79 评论 -
C++入门基础
C++基础入门摘要 C++基础知识包含六个核心内容:1)63个关键字,其中32个与C语言共享;2)命名空间用于解决命名冲突问题,可通过三种方式使用;3)输入输出使用iostream头文件,比C语言更便捷;4)缺省参数分为全缺省和半缺省,需遵循右向左的默认规则;5)函数重载通过参数列表区分同名函数,C++通过名称修饰实现;6)引用是变量的别名,必须初始化且绑定后不可更改。这些特性使C++在类型安全性和代码组织上优于C语言。原创 2025-06-25 10:22:08 · 903 阅读 · 6 评论 -
类和对象(上)
本文介绍了C++中类和对象的基础知识,包括面向对象与面向过程的区别、类的定义与封装、访问限定符、类的作用域、实例化过程以及类对象的内存模型。重点阐述了this指针的工作原理,它作为隐藏参数在成员函数中指向调用对象,解决了不同对象调用相同方法时的区分问题。文中通过日期类的示例展示了this指针的实际应用,并对结构体内存对齐规则进行了说明,最后对比了C++中struct和class的默认访问权限差异。这些内容是理解C++面向对象编程的重要基础。原创 2025-06-25 14:41:11 · 5921 阅读 · 3 评论 -
日期类的实现
本文介绍了C++日期类的实现,主要包括构造函数、打印函数和各类运算符重载。构造函数通过GetMonthDay函数验证日期合法性;打印函数显示日期信息;详细讲解了+=、-=、+、-等运算符的实现逻辑,强调复用原则和返回值处理;比较运算符通过复用>和==实现其他关系运算。日期类实现中重点关注了闰年处理、日期合法性调整以及前/后置++/--运算符的区别,体现了C++面向对象的思想和运算符重载的实用技巧。原创 2025-06-27 23:24:54 · 970 阅读 · 4 评论 -
类和对象(中)
本文摘要: C++类中有6个默认成员函数,包括构造函数、析构函数和拷贝构造函数等。构造函数负责对象初始化,具有与类同名、无返回值、可重载等特性;若未显式定义,编译器会生成默认构造函数。析构函数用于资源清理,在对象生命周期结束时自动调用,遵循"后构造先析构"原则。拷贝构造函数用于对象复制,必须使用引用传参以避免无限递归。这些默认成员函数为类提供了基本的对象生命周期管理能力,编译器会在用户未定义时自动生成相应实现。理解这些函数的作用和特性是掌握C++面向对象编程的基础。原创 2025-06-28 20:40:55 · 1356 阅读 · 13 评论 -
类和对象(下)
本文摘要: 类和对象(下)主要探讨了构造函数的深入使用和static成员。在构造函数部分,介绍了构造函数体赋值与初始化列表的区别,强调初始化列表对于引用成员、const成员和无默认构造类类型的必要性,并说明了初始化列表的执行顺序和效率优势。同时讲解了explicit关键字用于禁止单参数构造函数的隐式类型转换。 在static成员部分,阐述了静态成员变量的共享特性、类外定义要求以及静态成员函数的无this指针特性,说明静态成员可以通过类名或对象访问。特别指出计算类大小时不包含静态成员,且静态成员函数只能访问其原创 2025-06-29 13:25:05 · 1005 阅读 · 1 评论 -
C/C++内存管理
本文介绍了C/C++内存管理的核心内容。文章首先详细解析了内存分布,包括代码段、数据段、BSS段、堆和栈的特点及使用场景。然后对比了C语言(malloc/calloc/realloc/free)和C++(new/delete)的动态内存管理方式,重点指出new/delete在自定义类型处理上会调用构造函数和析构函数的优势。最后探讨了operator new/delete作为底层实现机制的作用,强调它们是系统提供的全局函数而非运算符。文章通过实例代码展示了各内存区域的使用方法,并提示了常见的内存管理注意事项。原创 2025-07-01 10:34:17 · 1032 阅读 · 7 评论 -
C++模板初阶
C++模板初阶:泛型编程的基础 本文介绍了C++模板的基本概念和使用方法。首先通过交换函数的例子展示了C语言和C++实现方式的不同,引出泛型编程的概念——编写与类型无关的通用代码。函数模板作为泛型编程的基础,其格式为template<typename T>,编译器会根据实参类型自动生成具体函数。文章详细讲解了模板的隐式和显式实例化,以及模板与非模板函数的匹配规则。最后介绍了类模板的定义格式和实例化方法,强调类模板名不是真正的类,需要指定类型参数才能实例化。原创 2025-07-02 16:47:44 · 1189 阅读 · 10 评论 -
【C++】STL详解(一):string类的使用,看完再也不怕指针乱飞了
本文主要介绍C++ STL中的string类及其核心用法。首先概述STL的概念、版本和六大组件,接着补充C++11的auto关键字和范围for语法。重点讲解string类的常用接口,包括构造方法(空串、C字符串、拷贝构造)和容量操作(size()、empty())。通过代码示例演示如何声明、初始化和操作字符串,并强调注意事项。文章采用图解+代码的形式,帮助读者快速掌握string类的基本用法。更多内容可访问作者博客和Gitee仓库。原创 2025-07-08 21:53:57 · 1193 阅读 · 26 评论 -
【C++ 】STL详解(二):从零造个string,仿佛解锁了隐藏技能
本文详细介绍了C++中string类的模拟实现,包含构造函数、拷贝构造函数、赋值运算符重载和析构函数等默认成员函数的实现方法。原创 2025-07-09 17:49:47 · 1057 阅读 · 35 评论 -
【C++】STL详解(三)—vector使用手册:不看你会后悔
vector是C++中最常用的容器之一,既有数组的高效访问特性,又能动态调整大小,适用于大多数需要顺序存储的场景。掌握其核心用法能显著提升C++开发效率。原创 2025-08-27 17:17:38 · 1050 阅读 · 49 评论 -
【C++】STL详解(四)—从零撸出vector,写完我膨胀了
文章采用类模板方式完整模拟了STL vector的核心功能,通过150行精简代码,完整呈现vector核心架构,帮助深入理解STL设计精髓。原创 2025-08-28 10:25:12 · 1887 阅读 · 94 评论 -
【C++ 】STL详解(五)—玩转 list,你真的懂了吗?
摘要 本文深入解析C++ STL中的list容器,从底层结构、特性到实际应用进行全面讲解。list作为双向链表实现,具有高效插入删除(O(1)复杂度)和双向迭代特性,但缺乏随机访问能力。文章详细介绍了list的构造函数(默认构造、填充构造、范围构造、拷贝构造)、特殊成员函数(析构函数、赋值运算符重载)、迭代器使用(begin/end/rbegin/rend)以及常用操作(size/empty/push_front等)。通过代码示例展示list的基本用法,帮助读者掌握这一重要容器的核心特性和适用场景。原创 2025-08-29 15:39:02 · 1616 阅读 · 91 评论 -
【C++ 】STL详解(六)—手撸一个属于你的 list!
该实现展示了STL list的核心机制,包括内存管理、迭代器设计和模板编程技术,为理解STL容器底层实现提供了实践范例。原创 2025-08-31 10:49:04 · 1451 阅读 · 22 评论 -
【C++】STL详解(七)—stack和queue的介绍及使用
本文介绍了C++ STL中的stack和queue容器。stack是后进先出(LIFO)的容器适配器,默认使用deque作为底层容器,支持push、pop、top等操作。queue是先进先出(FIFO)的容器适配器,同样默认使用deque,提供push、pop、front、back等函数。两者都不支持随机访问和遍历,只能通过不断pop来查看所有元素。文章通过代码示例展示了它们的基本用法,并指出stack适合函数调用等场景,queue适用于任务调度等场合。掌握这两种容器对理解STL其他组件有重要意义。原创 2025-09-15 21:21:54 · 1686 阅读 · 18 评论 -
【C++】STL详解(八)—stack和queue的模拟实现
本文介绍了C++ STL中stack和queue的模拟实现。stack和queue是容器适配器,基于顺序容器(如deque)封装而成,提供特定数据操作接口。stack遵循后进先出(LIFO)原则,queue遵循先进先出(FIFO)原则。文章详细讲解了它们的核心函数实现,包括push、pop、top、size、empty和swap等操作,并提供了完整的代码示例。通过底层容器适配,stack和queue保持了高效性与灵活性,适用于多种算法场景。原创 2025-09-18 19:56:49 · 17466 阅读 · 48 评论 -
【C++】STL的百宝箱—全能deque的简单讲解
摘要 STL中的deque(双端队列)是一个兼具vector和list优点的容器:既支持随机访问,又能在两端高效插入删除。其底层采用分段数组结构,通过指针数组(中控数组)管理多个buffer,实现灵活扩容。虽然随机访问效率略低于vector,但头尾操作性能优异,成为stack和queue的理想底层容器。deque的迭代器设计复杂,需维护四个指针来跨越不同buffer。尽管无法完全替代vector(极致随机访问)或list(任意位置O(1)插入),但作为折中方案,它在空间利用率和操作效率上取得了平衡。原创 2025-09-18 19:57:50 · 1466 阅读 · 65 评论 -
【C++】STL详解(九)—priority_queue的使用与模拟实现
`priority_queue` 是 C++ STL 中的重要容器适配器,它通过堆结构维护元素的优先级,使得每次访问和删除的都是当前优先级最高的元素。本文从 `priority_queue` 的定义方式与常用接口出发,结合示例代码展示其基本用法,并进一步通过模拟实现深入剖析了堆的向上调整与向下调整算法,帮助读者从底层原理的角度全面理解 `priority_queue` 的运行机制。无论是日常刷题,还是在工程中处理调度、路径搜索等场景,掌握 `priority_queue` 都能大幅提升代码效率与思路清晰度。原创 2025-09-20 21:05:13 · 1162 阅读 · 22 评论 -
【C++】玩转模板:进阶之路
本文围绕 C++ 模板的进阶用法展开,从非类型模板参数入手,结合array容器对比传统 C 数组,深入分析了类模板的全特化与偏特化,并通过实例展示如何对不同类型进行特化。随后介绍了模板的分离编译问题,解析了为什么模板声明与定义分离会导致链接错误,以及如何通过显式实例化或头文件内定义来解决。文章配合代码与图解,力求让读者清晰理解模板的底层机制和实际应用。原创 2025-10-01 02:43:44 · 15661 阅读 · 14 评论
分享