补天系列——C++基础
文章平均质量分 94
重点讲解C++面向对象特性和数据结构,以此巩固C++语法基础
NiKo_W
take chance,make mistakes
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ 反向迭代器模拟实现
摘要: 本文详细分析了C++中反向迭代器的实现机制。反向迭代器本质上是基于正向迭代器的适配器,通过模板技术实现。SGI-STL3.0版本提供了两种实现方式:支持偏特化的新版本(reverse_iterator)和旧版本(reverse_bidirectional_iterator)。核心实现包括operator*返回前一个位置、operator++调用正向迭代器的operator--等关键操作。文章还展示了如何在list和vector容器中适配反向迭代器,重点说明了rbegin()和rend()的实现逻辑,原创 2025-09-25 22:54:00 · 1180 阅读 · 0 评论 -
C++ 智能指针
本文系统介绍了C++智能指针的设计原理与使用。首先阐述了智能指针的引入背景,通过异常场景下内存泄漏问题说明RAII(资源获取即初始化)机制的重要性。详细讲解了标准库中的四种智能指针:auto_ptr(已废弃)、unique_ptr(独占所有权)、shared_ptr(共享所有权)和weak_ptr(解决循环引用),重点分析了shared_ptr基于引用计数的实现原理及线程安全问题。文章还探讨了智能指针的高级特性:定制删除器、operator bool重载等,并提供了内存泄漏的检测方法与预防建议。原创 2025-09-06 18:26:54 · 1125 阅读 · 1 评论 -
C++ 异常
本文介绍了C++异常处理的核心机制,包括异常的抛出与捕获,异常的重新抛出,栈展开等等。并结合实际的消息重传例子解释了相应的工作原理,接着讲解了不同版本C++异常的处理规范,并建议使用简单强大的noexcept。最后讲解了C++官方的标准库异常,这同时也是我们日常中最常使用的异常库原创 2025-09-05 18:19:00 · 811 阅读 · 3 评论 -
C++11 类功能与包装器
本文介绍了C++11中的两个重要特性:移动语义和包装器/绑定机制。第一部分详细讲解了默认移动构造函数和移动赋值运算符的自动生成条件、行为特点及其与拷贝操作的区别,强调了对资源管理类需自定义移动操作的重要性。第二部分阐述了function包装器如何统一处理各种可调用对象,以及bind函数如何实现参数绑定和顺序调整,并通过逆波兰表达式案例展示了这些特性的实际应用价值。这些新特性显著提升了C++的灵活性和效率。原创 2025-09-04 16:35:50 · 1117 阅读 · 1 评论 -
C++11 可变参数模板与Lambda表达式
简要介绍了C++11中新增的两点内容:可变模板参数和lambda表达式。分别介绍了他们的用途和原理原创 2025-09-03 17:38:56 · 960 阅读 · 0 评论 -
C++11 列表初始化和左值右值
C++11引入了多项重要更新,主要包括列表初始化和右值引用两大特性。列表初始化扩展了{}初始化方式,支持内置类型和自定义类型的直接初始化,并引入initializer_list机制。右值引用通过区分左值/右值,实现了移动语义,避免不必要的拷贝开销。移动构造和移动赋值通过"窃取"临时对象资源提高效率,完美配合传值返回场景。此外,引用折叠规则支持万能引用,结合完美转发可保持参数原始类型特性。这些改进显著提升了C++在处理临时对象和资源管理时的性能表现。原创 2025-09-02 11:08:43 · 718 阅读 · 3 评论 -
C++ STL之哈希封装实现unordered_map/set
基本框架仿照封装红黑树实现map/set,对HashTable进行了修改,依旧沿用之前的泛型思想,并且详细讲解了HashTable的迭代器原创 2025-08-31 20:50:25 · 514 阅读 · 0 评论 -
C++ 数据结构之哈希表及其相关容器
本文主要探讨了哈希表及其相关容器的实现原理与应用。文章首先对比了unordered_set/set和unordered_map/map的底层实现差异:前者基于哈希表实现,提供O(1)的平均时间复杂度但无序;后者基于红黑树实现,保持有序但时间复杂度为O(logn)。接着详细解析了哈希表的核心概念,包括哈希函数设计(如除法散列法、乘法散列法)、哈希冲突处理机制(开放地址法和链地址法)以及负载因子控制等。通过代码示例展示了线性探测和二次探测的实现方式,并分析了哈希桶的设计思路。原创 2025-08-31 16:09:37 · 1014 阅读 · 2 评论 -
C++ STL之封装红黑树实现map/set
本文通过分析STL源码,深入解析了红黑树封装map/set的实现机制。首先介绍了源码中map和set头文件的结构,重点解析了红黑树模板参数的设计,特别是KeyOfValue参数的作用。接着详细说明了红黑树结点的修改方案,包括使用模板参数T代替具体类型以支持泛型编程。文章还深入探讨了红黑树迭代器的实现,特别是operator++和operator--的中序遍历逻辑。最后给出了完整的模拟实现代码,包括RBTree.h、my_set.h和my_map.h三个文件,展示了如何通过一棵红黑树同时支持set和map的功原创 2025-08-29 17:50:58 · 1066 阅读 · 2 评论 -
C++数据结构之红黑树
红黑树是一种自平衡二叉搜索树,通过颜色规则实现近似平衡。它具有四个基本特征:1)二叉搜索树性质;2)根叶节点为黑色;3)不存在连续红节点;4)任意路径黑节点数相同。插入时通过变色和旋转(单旋/双旋)维护平衡,时间复杂度为O(logN)。相比AVL树,红黑树的平衡要求更宽松,插入删除效率更高,被广泛应用于STL的map/set实现。验证时需检查四条规则:颜色合法性、根节点黑色、无连续红节点、路径黑节点数相同。红黑树通过颜色约束间接实现平衡,在性能和实现复杂度间取得良好平衡。原创 2025-08-28 17:28:08 · 1037 阅读 · 4 评论 -
C++数据结构之AVL树详解
AVL树是一种自平衡二叉搜索树,通过平衡因子(BF)控制树高,确保任意节点左右子树高度差不超过1。当插入或删除导致BF超过±1时,通过四种旋转操作(LL、RR、LR、RL)恢复平衡。文中详细介绍了旋转规则和实现方法,并提供了C++代码实现,包括节点结构、插入操作和四种旋转函数。AVL树通过将树结构尽量转化为完全二叉树,优化查询性能为O(logN)。代码部分展示了如何计算平衡因子、检测平衡状态以及执行旋转操作来维护树的平衡性。原创 2025-08-27 17:31:56 · 615 阅读 · 2 评论 -
C++ STL之map/set
本文介绍了C++关联式容器与序列式容器的区别,重点讲解了set和map系列的使用方法。set是基于红黑树实现的唯一键容器,支持快速查找、插入和删除操作,保持元素有序性。map是键值对容器,同样基于红黑树实现,支持通过键快速查找和修改值。文章详细说明了set和map的构造、迭代器使用、增删查等操作,比较了set/multiset和map/multimap的区别,并特别介绍了map的operator[]操作符的多功能特性。最后对pair类型在map中的关键作用进行了说明。原创 2025-08-26 11:19:43 · 6255 阅读 · 3 评论 -
C++数据结构之二叉搜索树
本文系统介绍了二叉搜索树(BST)的概念、特性和实现。二叉搜索树是一种有序数据结构,具有左子树值≤根节点值≤右子树值的特性,其中序遍历会得到有序序列。文章详细阐述了BST的插入、查找和删除操作,指出其时间复杂度在最优情况为O(logN),最差退化为O(N)。接着介绍了两种应用场景:key模型(如停车场系统)和key/value模型(如字典),并分别给出了C++实现代码。最后指出普通BST的性能局限,为后续介绍AVL树和红黑树等平衡二叉搜索树做铺垫。原创 2025-08-25 15:45:17 · 620 阅读 · 3 评论 -
C++面向对象之多态
本文主要探讨了C++中的多态机制,重点分析了运行时多态的实现原理。多态分为编译时多态(函数重载、模板)和运行时多态(虚函数机制),后者通过基类指针/引用调用虚函数实现不同派生类对象的行为差异。文章详细解析了虚函数表(vtable)的工作原理,包括动态绑定过程、虚函数表指针(vptr)的存储位置等关键机制。同时介绍了虚函数重写、协变、析构函数重写等特殊场景,以及override/final关键字的使用。最后区分了重载、重写和隐藏的概念,并阐述了纯虚函数和抽象类的特性。通过买票等实例说明了多态在实际编程中的应用原创 2025-08-24 16:13:44 · 1103 阅读 · 3 评论 -
C++ 面向对象之继承
本文系统介绍了C++中的继承机制,主要内容包括: 继承的基本概念与定义,说明派生类与基类的关系; 派生类与基类的转换规则,重点讲解切片操作; 继承中的作用域问题,包括同名成员隐藏规则; 派生类中默认成员函数的特殊处理规则; 实现不可继承类的两种方法; 静态成员在继承体系中的特性; 多继承与菱形继承问题及其解决方案; 继承与组合的对比分析。 文章通过具体代码示例详细阐述了继承的各类特性,包括访问控制、作用域、构造函数调用顺序等关键问题,并针对多继承带来的复杂性提出了实践建议。最后强调应合理选择继承或组合来实现原创 2025-08-22 18:56:27 · 1046 阅读 · 2 评论 -
C++模板进阶
对模板的特性进行了进一步的深入探讨,并且客观讨论了模板的优缺点原创 2025-08-21 18:10:17 · 689 阅读 · 3 评论 -
C++STL之Stack/Queue详解
本文系统介绍了C++中三种容器适配器的使用与实现:1. Stack(栈):后进先出结构,详解其基本操作(push/pop/top等)、最小栈实现及栈序列验证算法;2. Queue(队列):先进先出结构,说明其操作接口及基于deque的适配器实现;3. Priority_queue(优先队列):堆结构实现,阐述其大/小堆构建方式及自定义类型比较方法。文章还深入分析了容器适配器设计思想(接口简化与底层容器封装)以及deque的核心特性(分块存储与复杂迭代器实现),揭示了其作为stack/queue默认底层容器的原创 2025-08-19 21:52:29 · 772 阅读 · 3 评论 -
C++STL之list详解
本文介绍了C++中list容器的定义、使用和模拟实现。list是带头节点的双向循环链表,支持多种构造方式,包括初始化列表、拷贝构造等。文章详细讲解了list的迭代器实现原理,指出由于链表空间不连续,迭代器需要封装为类类型,并重载相关操作符。在模拟实现部分,展示了结点结构、迭代器类和list类的核心代码,包括插入删除等操作。最后补充了迭代器分类知识,指出list迭代器属于双向迭代器,与vector等容器的随机迭代器存在本质区别。原创 2025-08-18 11:54:02 · 877 阅读 · 2 评论 -
C++ STL之vector详解
介绍了vector的定义以及用法,并重点强调了vector中容易出现的迭代器失效问题,模拟实现了vector,并且详细介绍了vector在二维数组中的各种行为。原创 2025-08-16 17:37:35 · 695 阅读 · 0 评论 -
C++中的STL标准模板库和string
大致介绍了STL六大组件的基础构成,以及string类的功能及模拟实现原创 2025-08-13 19:36:32 · 987 阅读 · 0 评论 -
C++模板基础
本文介绍了C++中的泛型编程与模板机制。主要内容包括:1. 泛型编程通过模板实现代码复用,解决了函数重载带来的代码冗余问题;2. 函数模板通过编译器自动推导类型参数,支持隐式和显式实例化;3. 类模板可以创建通用数据结构,实例化时需显式指定类型参数;4. 模板与typedef的区别:模板会生成新类型,而typedef只是创建类型别名。模板机制是C++标准库(STL)的基础,实现了强大的泛型编程能力。原创 2025-08-12 16:36:12 · 1046 阅读 · 0 评论 -
C/C++内存管理
1. 调用operator new函数申请空间2. 在申请的空间上执行构造函数,完成对象的构造operator delete: 该函数最终是通过free来释放空间。原创 2025-08-11 17:39:50 · 693 阅读 · 0 评论 -
C++面向对象及其特性(2)
本文系统介绍了C++中构造函数初始化列表、类型转换、static成员、友元、内部类和匿名对象等核心概念,重点分析了初始化列表的特性及其初始化顺序问题。通过多个代码示例深入讲解了static成员变量的共享特性及其应用场景,友元机制对封装性的突破,以及内部类的作用域和访问权限控制。同时探讨了匿名对象的生命周期特点和编译器对对象拷贝的优化策略,为理解C++面向对象编程的关键特性提供了详细指导。原创 2025-08-10 20:22:35 · 582 阅读 · 0 评论 -
C++面向对象及其特性
主要讲解面向对象中的类的基础知识和六大默认成员函数原创 2025-08-09 20:07:31 · 835 阅读 · 0 评论 -
C++语法与面向对象特性(2)
本文章将继续根据一些基本的语法和特性方面介绍C++与C语言的一些不同之处,便于快速入门C++原创 2025-08-07 20:18:03 · 382 阅读 · 0 评论 -
C++基础语法与面向对象特性
C++基础语法,本篇主要介绍在接触C++时与C语言的一些不同之处,用于快速入门原创 2025-07-29 22:01:33 · 702 阅读 · 0 评论
分享