
C++学习
文章平均质量分 91
Cryptic_Odyssey
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
红黑树的模拟实现
红黑树是一种自平衡二叉搜索树,其名称源于节点非红即黑的特性。它的平衡性虽不及AVL树,但通过四条规则确保相对平衡:1)节点颜色为红或黑;2)根节点为黑;3)红色节点的子节点必为黑;4)任意节点到叶子的路径含相同数量黑节点。这些规则保证了最长路径不超过最短路径的两倍,维持O(logn)的查找效率。实现时通过变色和旋转(单旋/双旋)处理插入后的不平衡情况,核心代码展示了节点插入、颜色调整和旋转操作。红黑树在保持高效性的同时,降低了完全平衡的维护成本,广泛应用于STL等库中。原创 2025-07-08 16:19:36 · 785 阅读 · 0 评论 -
C++11之右值引用和移动语义
本文详细介绍了C++11中左值、右值及其相关概念: 左值右值概念:左值是可持久存在的变量表达式,右值是临时对象或字面量。传统理解将左值视为赋值符号左侧是错误的。 左值引用和右值引用:左值引用只能绑定左值,右值引用只能绑定右值。通过move函数可将左值转为右值。 引用延长生命周期:右值引用和const左值引用都能延长临时对象的生命周期。 移动语义:通过移动构造和移动赋值实现资源"窃取",避免不必要的拷贝,提高效率。 完美转发:使用forward保持参数的原始属性,实现参数的完美传递。 类型原创 2025-06-28 11:12:01 · 645 阅读 · 0 评论 -
封装unordered系列容器
本文详细介绍了如何基于哈希桶实现unordered_map和unordered_set容器。主要内容包括:1) 容器基本架构设计,通过MapKeyOfT和SetKeyOfT仿函数区分键值;2) 普通迭代器实现,重点解决类相互依赖问题和operator++的三种遍历情况;3) const迭代器实现时需注意模板参数顺序和const修饰问题;4) 通过改造insert返回值实现unordered_map的[]运算符;5) 最终封装完成的unordered_map和unordered_set代码。实现过程中特别强调原创 2025-06-25 10:12:40 · 534 阅读 · 0 评论 -
Hash表模拟实现——链地址法
本文探讨了哈希表中解决冲突的两种方法:链地址法和开放定址法。链地址法将冲突元素存储在链表或红黑树中,具有处理冲突高效、不需频繁扩容的优点,但空间开销较大;开放定址法则通过占用其他位置解决冲突,空间利用率高但可能影响查询效率。重点介绍了链地址法的实现,包括插入、查找和删除操作的逻辑,并提供了封装后的代码实现。文中强调了析构函数的重要性以防止内存泄漏,并详细说明了扩容的优化处理。代码实现考虑了字符串特化的哈希函数处理,为哈希表提供了完整的解决方案。原创 2025-06-23 19:12:25 · 376 阅读 · 0 评论 -
Hash表模拟实现——开放定址法
Hash表模拟实现——开放定址法原创 2025-06-22 15:28:59 · 803 阅读 · 0 评论 -
set和map的封装
本文分析了STL中set和map的实现原理,它们都是基于红黑树(RBTree)实现的。文章首先探讨了set和map在模板参数上的区别,set使用单一键类型,而map使用key-value对。接着详细介绍了红黑树迭代器的实现,包括operator++和operator--的逻辑,以及普通迭代器和const迭代器的封装。最后讲解了map中operator[]的实现机制,它通过insert接口返回pair<iterator,bool>来判断是否存在该元素,从而实现对元素的访问和插入操作。整体框架展示了如何通过模板原创 2025-06-19 18:11:34 · 938 阅读 · 0 评论 -
AVL树的模拟实现
AVL树得名于它的发明者G.M.Adelson-Velsky和E.M.Landis是两个前苏联的科学家,他们在1962 年的论文《Analgorithmfortheorganizationofinformation》中发表了它。原创 2025-06-15 20:52:46 · 1014 阅读 · 0 评论 -
深入STL之set_map初识
本文摘要:文章详细介绍了C++中的关联式容器set和map。set是基于红黑树的key结构容器,map则是key/value结构。首先区分了序列式容器和关联式容器的概念,然后重点讲解了pair类及其使用。通过对set的insert、find、erase、count等接口的模拟实现,展示了其操作方法,并比较了set和multiset的区别。最后解析了map特有的[]操作符底层实现原理,说明其通过insert返回pair对象来访问value的特性。文章通过具体代码示例,帮助读者深入理解这两种重要容器的使用方式和原创 2025-06-01 16:53:37 · 734 阅读 · 0 评论 -
C++二叉搜索树的模拟实现
二叉搜索树(BST)是一种特殊的二叉树,其左子树的所有节点值小于根节点,右子树的所有节点值大于根节点。BST的主要应用场景是高效搜索,其搜索时间复杂度为O(log n),适用于大规模数据的快速查找。BST支持插入、查找和删除操作,但不支持修改节点值,以免破坏树的结构。BST的变种如AVL树和红黑树进一步优化了平衡性,提升了查询效率。BST的典型应用包括停车场管理系统、拼写检查、词典翻译和单词统计等。通过模拟实现BST,可以更好地理解其插入、查找和删除操作的逻辑。原创 2025-05-20 15:11:42 · 798 阅读 · 0 评论