
C++
文章平均质量分 95
深度解析C++中常用语法与算法
终焉代码
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【C++】map与set底层结构——红黑树
本文详细介绍了红黑树的概念、规则及其实现。红黑树是一种自平衡二叉搜索树,通过颜色约束确保路径长度不超过两倍。文章首先阐述了红黑树的四个核心规则,包括节点颜色、根节点为黑、红节点子节点必为黑、各路径黑节点数相同。随后重点讲解了红黑树的插入操作,分析了三种处理情况(变色、单旋+变色、双旋+变色)及其实现代码。最后介绍了红黑树的查找功能和验证方法,通过检查四个规则来确保树的平衡性。测试代码展示了红黑树的具体应用场景。本文为理解STL中map和set的实现原理提供了重要参考。原创 2025-10-03 22:47:36 · 505 阅读 · 0 评论 -
【C++】map与set的底层实现——AVL树
本文详细介绍了AVL树的结构与实现。AVL树是一种自平衡二叉搜索树,通过控制左右子树高度差不超过1来保持平衡。文章首先阐述了AVL树的概念和平衡因子机制,然后重点讲解了其实现过程。主要包括:1. 树节点结构设计;2. 插入数据时的平衡因子更新规则;3. 四种旋转操作(右单旋、左单旋、左右双旋、右左双旋)的实现细节;4. 其他功能如遍历、平衡性检测和查找操作。AVL树通过旋转操作保持平衡,确保查找、插入、删除等操作的时间复杂度稳定在O(logN),相比普通二叉搜索树有本质提升。原创 2025-09-21 14:14:16 · 935 阅读 · 0 评论 -
【C++】模板的进阶使用
本文深入探讨C++模板的高级用法,主要包括非类型模板参数和模板特化两大核心内容。非类型模板参数允许使用整型常量作为参数,典型应用如STL中的array容器,相比原生数组更安全高效。模板特化分为函数模板特化和类模板特化,其中类模板特化又包含全特化(完全确定所有参数)和偏特化(部分参数特化或添加限制条件)。文章通过具体代码示例展示了这些技术的实际应用场景,如处理指针类型的特殊比较、容器类的特化实现等,帮助开发者根据需求选择合适的技术方案(函数重载或模板特化)来提升代码的灵活性和安全性。原创 2025-09-11 14:50:48 · 974 阅读 · 0 评论 -
【C++】STL二叉搜索树——map与set容器的基础结构
摘要:本文详细介绍了二叉搜索树(BST)的概念、性能分析和实现方法。二叉搜索树是一种高效查找结构,具有左子树值≤根节点≤右子树值的特性。文章分析了BST的最优(O(logN))和最差(O(N))查找性能,并对比了其与二分查找的优缺点。重点阐述了BST的创建、插入、查找和删除操作的实现细节,包括迭代和递归两种实现方式。针对复杂的删除操作,详细说明了三种不同情况的处理策略,并提供了完整的C++实现代码。本文为后续学习STL的map和set容器打下基础,是理解高效搜索数据结构的重要入门内容。原创 2025-08-11 21:34:13 · 928 阅读 · 0 评论 -
【C++】STL——priority_queue的使用与底层模拟实现
本文详细讲解了C++ STL中priority_queue的使用和模拟实现。优先级队列是一种容器适配器,基于堆结构实现,默认是大堆(less),可通过greater参数改为小堆。文章介绍了仿函数的概念及其在比较操作中的应用,并重点展示了priority_queue的模拟实现过程,包括push、pop、top等核心接口以及向上/向下调整算法。最后通过迭代器构造完善了功能,给出了完整的priority_queue类模板代码,实现了与STL相似的优先级队列功能。原创 2025-08-11 21:34:03 · 950 阅读 · 0 评论 -
STL详解——list的模拟实现
STL中的list容器不同于数据结构中常见的单链表,而是一种带头双向链表,因此在实现过程中也以此结构为基础实现。T val;完成结点的定义后,我们便成将list容器抽象为以头结点(哨兵位)为头的多结点链,结点间能通过彼此互相访问。因此list的成员变量便是头结点(_head)。原创 2025-06-08 19:31:36 · 804 阅读 · 0 评论 -
STL解析——list的使用
STL容器中提供的list容器也是一种顺序容器,底层实现方式是带头双向链表,这种实现方式能比单链表更高效的访问数据。下面围绕部分重要接口的使用展开讲解。原创 2025-06-02 18:21:51 · 1196 阅读 · 0 评论 -
STL解析——String类详解(使用篇)
在C语言中字符串底层实际是以'\0'结尾的字符数组,而这样操作方式并不是很方便,因此C++中将字符串封装成了独立的sring类,下面就来详细了解下string类的使用。以下内容均参考。原创 2025-05-30 11:30:00 · 806 阅读 · 0 评论 -
STL解析——vector的使用及模拟实现
在C++中vector算正式STL容器,功能可以类比于数据结构中的顺序表,用法可以看作简化版的string。原创 2025-05-30 11:29:38 · 1141 阅读 · 0 评论 -
C++入门篇——类和对象(下)
之前我们实现构造函数时,初始化成员变量主要使⽤函数体内赋值,构造函数初始化还有⼀种⽅式,就是初始化列表,初始化列表的使⽤⽅式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成员列表,每个"成员变量"后⾯跟⼀个放在括号中的初始值或表达式。class Datepublic://构造函数:_year(1), _day(1)private:int _year;int _month;int _day;return 0;原创 2025-05-11 21:34:48 · 1243 阅读 · 0 评论 -
C++内存管理详解
new和delete是C++中用于动态管理内存的运算符//管理对象//管理对象数组int main()test1;return 0;具体分析如下:既然new和delete与C中动态内存管理差不多,那为什么还要设计这两个运算符呢?C++中引入了自定义类型,为自定义类型开辟空间也算实例化的一种,但使用malloc等函数无法在开辟内存时调用构造初始化,所以在C++中引入new和delete来动态管理自定义类型空间。原创 2025-05-11 21:34:33 · 767 阅读 · 0 评论 -
C++类和对象详解(中)
类中的默认成员函数就是用户没有显示实现,编译器会⾃动⽣成的成员函数。⼀个类,在不写的情况下编译器会默认⽣成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个,后面两个了解下即可。其次在C++11后还增加了两个新的默认成员函数,这个我们在后面再分析。默认成员函数很重要,也⽐较复杂,我们要从两个⽅⾯去学习:(1)我们不写时,编译器默认⽣成的函数⾏为是什么,是否满⾜我们的需求。(2)编译器默认⽣成的函数不满⾜我们的需求,我们需要⾃⼰实现,那么如何⾃⼰实现?原创 2025-05-03 00:20:24 · 1078 阅读 · 0 评论 -
C++类和对象详解(中续)
运算符重载的设计依旧是为了完善自定义类型的功能,对于内置类型(以整型为例),可以进行大小比较、四则运算等运算符的计算,但对于自定义类型要怎么比较大小呢?可以直接用默认运算符吗?显然是不能的。当运算符被⽤于类类型的对象时,C++语⾔允许我们通过运算符重载的形式指定新的含义。C++规定类类型对象使⽤运算符时,必须转换成调⽤对应运算符重载,若没有对应的运算符重载,则会编译报错运算符重载是具有特殊名字的函数,他的名字是由operator和后⾯要定义的运算符共同构成。原创 2025-05-03 00:20:41 · 889 阅读 · 1 评论 -
C++入门篇——引用详解
C++中引入的引用,顾名思义就是引用一个对象的名字,传递给另一对象名,也可理解为取别名。引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名,编译器不会为引⽤变量开辟内存空间, 它和它引⽤的变量共⽤同⼀块内存空间。抽象点就像⽔壶传中李逵,宋江叫"铁⽜",江湖上⼈称"⿊旋⻛";林冲,外号豹⼦头。都是同一对象,只是名称有所区别。这里的类型包括了所有之前学过的数据类型,像整型、指针类型、结构体类型等。但引用在定义时也需注意以下问题:1.引用的别名不能与引用对象相同。原创 2025-04-23 21:50:56 · 1070 阅读 · 1 评论 -
C++类和对象详解(上)
inline是在C++中新引入的内联功能,由inline修饰的函数为内联函数,编译时C++编译器会在调⽤的地⽅展开内联函数,这样调⽤内联函数就不需要建⽴栈帧了,进而提⾼效率。通俗来讲就是函数像宏函数预处理一样展开函数,不会再像平常函数一样在栈区调用。但与宏函数不同的是,内联函数书写更为简单不易出错。以求和函数为例//宏函数定义//内联函数定义在定义宏函数时,除非经常刻意使用宏,那么很容易将宏函数写错,并且宏函数语法错误很少,项目中很难检测出来。而对于函数而言,则很少会出现这种情况。原创 2025-04-23 21:50:40 · 777 阅读 · 0 评论 -
C++入门篇(从C过渡C++)
定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下⾯的rand不在冲突了。C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。局部域和全局域除了会影响。原创 2025-04-19 09:47:14 · 1006 阅读 · 0 评论