自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 用一棵红黑树同时实现 map 和 set:泛型封装与迭代器设计

本文详解如何用一棵泛型红黑树同时实现 set 与 map:通过三个模板参数——Key(查询类型)、Value(结点存储类型)、KeyOfT(提取 key 的仿函数),统一底层结构。set 存 Key,map 存 pair<const Key, T>,均通过 KeyOfT 提取 key 进行比较,避免重复代码。重点剖析迭代器的 ++/-- 实现,揭示标准库高效封装的核心思想。

2026-11-11 19:57:13 145

原创 C++ 红黑树实现详解:四条规则、插入的三种情况与完整代码

AVL 树红黑树平衡标准严格:左右子树高度差 ≤ 1近似:最长路径 ≤ 最短路径 2 倍维护手段高度差(平衡因子)+ 旋转颜色约束 + 变色/旋转查找略快(树更矮)略慢(树可能高一些)插入/删除的旋转次数多少适用场景查找远多于修改通用的平衡搜索树mapset的底层)关键结论:两者效率是同一档次(都是 O(log N)),但插入相同数量的结点,红黑树的旋转次数明显更少——因为它对平衡的控制没那么严格。

2026-11-11 19:56:07 203

原创 C++AVL树

AVL树通过平衡因子与旋转机制实现自平衡,确保树高始终为O(log N)。插入后沿父节点向上更新平衡因子(左减右加),若某节点平衡因子变为±2,则需旋转调整。四种旋转(单旋、双旋)可恢复平衡并降低子树高度,避免继续回溯。关键在于:旋转后子树高度恢复,故无需再向上调整。完整实现包含结点结构、插入逻辑及平衡因子更新规则,核心是利用_parent指针高效回溯,保障增删查改稳定在O(log N)。

2026-11-08 09:32:51 281

原创 mep和set

set 与 map 是基于红黑树的关联式容器,分别实现键值去重排序(set)与键值映射(map)。二者均支持高效查找、插入与删除(O(log N)),迭代器按中序遍历保持有序。set 元素不可修改,map::operator[] 可实现查找、插入与覆盖三合一。multiset/multimap 允许重复键,适用于需保留重复元素的场景。

2026-11-08 09:31:42 348

原创 二叉搜索树

本文详解C++二叉搜索树(BST)的核心概念与实现,涵盖其结构性质、增删查操作及关键细节。通过对比线性查找与有序数组的局限性,引出BST在“查找快”与“修改快”间的平衡优势。重点讲解插入、查找、删除(含四种情况与替换法)的逻辑与代码实现,强调中序遍历得有序序列的性质。指出普通BST最坏退化为链表,需引入平衡树(如红黑树)优化。最后以完整key版代码收尾,为理解map/set底层原理奠定基础。

2026-11-07 20:22:46 434

原创 C++多态

本文详解C++多态机制,涵盖虚函数、重写、抽象类及虚函数表原理。强调运行时多态需满足继承关系、基类指针/引用调用虚函数且完成重写。通过买票、动物叫等实例说明“同一接口,不同实现”的核心思想。重点解析虚函数表如何实现动态绑定,指出析构函数必须声明为虚函数以避免资源泄漏,并介绍override与final提升代码安全性的关键作用。

2026-11-07 20:20:22 461

原创 C++继承

本文系统详解C++继承机制,从代码复用出发,剖析继承如何消除冗余、构建层次结构。重点解析继承方式对访问权限的影响(public/protected/private),揭示“访问权限 = min(基类限定符, 继承方式)”的核心规则。深入探讨构造/析构顺序、同名隐藏而非重载等关键细节,并以菱形继承为例,引出虚继承的内存模型问题,全面覆盖从基础使用到底层实现的进阶内容,帮助开发者真正“写对”并“看懂”继承。

2026-11-06 20:57:30 348

原创 C++模板进阶

本文深入解析C++模板进阶三大核心:非类型模板参数(如size_t N实现编译期数组)、模板特化(针对特殊类型定制逻辑,如Data<int, char>全特化、Data<T1, int>偏特化)及分离编译问题。通过实例说明其应用场景与限制,强调在实际开发中应优先使用函数重载而非函数模板特化,以提升代码可读性与可维护性。

2026-11-06 20:53:44 251

原创 Stack和Queue

本文详解C++ STL中stack、queue与priority_queue作为容器适配器的本质:它们不直接存储数据,而是封装底层容器(如deque、vector、list)并提供特定接口。stack实现后进先出(LIFO),通过push_back、pop_back和back操作;queue实现先进先出(FIFO),需支持pop_front,故默认使用deque;priority_queue基于堆结构,实现优先级管理。三者均无迭代器,不可用于排序或遍历。核心思想是“接口适配”,选择合适底层容器可优化性能——

2026-11-05 21:06:06 365

原创 List类

list 是 STL 中的双向循环链表,支持高效插入删除(O(1)),但不支持随机访问。其迭代器非指针,需封装实现;提供 begin()/end() 和 rbegin()/rend() 实现正反向遍历。容量操作仅含 size() 与 empty(),无 capacity()。元素访问通过 front() 与 back() 获取引用,支持修改。增删操作如 push_front、insert、erase 等均在指定位置高效执行,适用于频繁中间操作场景。

2026-11-05 21:03:52 326 1

原创 Vector

本文详细总结C++ STL中vector容器的核心特性:作为动态数组,支持随机访问与自动扩容,底层为连续内存。重点解析其构造、迭代器(即指针)、容量管理(size/capacity/resize/reserve)及扩容机制(不同编译器实现差异)。强调reserve仅扩容量、不初始化元素,而resize改变大小并可填充值。最后指出迭代器失效源于扩容导致指针失效,建议优先使用下标访问以避免问题。

2026-11-04 22:18:19 242

原创 string

本文系统总结C++ STL中string类的核心内容,剖析其相较于C风格字符串在封装性、内存管理与安全性上的优势。重点讲解auto与范围for的使用技巧,梳理常用构造函数及容量操作接口(如size()、capacity()、empty()),强调size()与capacity()的区别,并指出常见踩坑点,帮助开发者高效、安全地使用string。

2026-11-04 22:10:27 135

原创 C++模板初阶

本文介绍了泛型编程中函数模板与类模板的实现原理。通过函数模板可避免重复编写类型相关的交换函数,提升代码复用性与可维护性。函数模板在编译时根据实参类型实例化为具体函数,支持隐式与显式实例化,并遵循特定参数匹配规则。类模板则用于定义通用数据结构(如栈),需通过实例化生成具体类型。两者均体现了编译期多态,是C++泛型编程的核心机制。

2026-09-17 17:33:18 182 1

原创 C++内存管理

/ new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;free(p5);return 0;注意:new会调用构造函数,delete会调用析构函数,而malloc与free不会。

2026-09-16 22:46:29 26 4

原创 类和对象(下)

本文介绍了C++中构造函数的初始化列表用法,强调尽量使用初始化列表进行成员初始化,特别是对引用、const成员和没有默认构造的类类型成员。文章还讨论了类型转换、static成员、友元机制、内部类、匿名对象以及编译器对对象拷贝的优化。初始化列表按照成员声明顺序执行,与列表顺序无关。static成员需在类外初始化,友元可突破封装访问私有成员但会增加耦合度。匿名对象生命周期仅限当前行,编译器会优化连续拷贝操作。

2026-08-13 13:47:32 177 2

原创 类和对象(中)

构造函数的本质是要替代我们以前Stack和Date类中写的Init函数的功能,构造函数⾃动调⽤的。们不写的情况下编译器会默认⽣成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个,最。内置类型就是语⾔提供的原⽣数据类型,构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务并。析构函数与构造函数功能相反,析构函数不是完成对对象本⾝的销毁,⽐如局部对象是存在栈帧的,如果⼀个构造函数的第⼀个参数是⾃⾝类类型的引⽤,且任何额外的参数都有默认值,则此构造函数。

2026-07-12 11:00:55 144

原创 类和对象(上)

本文介绍了C++中类的定义与实例化的核心概念。主要内容包括:1. 类定义格式,使用class关键字定义类,包含成员变量和成员函数,struct也可定义类但默认访问权限不同;2. 访问限定符(public/protected/private)实现封装,控制成员访问权限;3. 类域作用范围及::操作符的使用;4. 实例化过程是将类类型转化为物理内存对象,对象只存储成员变量;5. 对象大小遵循内存对齐规则;6. this指针机制,编译器自动为成员函数添加指向当前对象的指针形参,实现对象成员访问。文章通过代码示例详

2026-07-08 19:43:08 177

原创 C++入门基础

本文概述了C++编程语言的基础知识,主要内容包括: C++发展历史:从1970年C语言诞生到1998年C++标准化过程,介绍了本贾尼·斯特劳斯特卢普开发C++的初衷及重要版本演进。 基础语法: 首个C++程序示例(Hello World) 命名空间(namespace)的作用与三种使用方式 输入输出流(cin/cout)的使用方法及注意事项 核心特性: 缺省参数的分类(全缺省/半缺省)及使用规则 函数重载的概念和实现条件(参数类型/数量不同) 学习资源: 推荐了三个C++标准文档网站 对比了不同参考文档的优

2026-07-07 16:45:10 477

原创 扫雷游戏设计与实现全解析

本文介绍了一个基于C语言实现的简易扫雷游戏设计。游戏采用9×9棋盘,默认布置10颗雷,使用两个11×11的二维数组分别存储雷区信息和玩家界面。通过多文件结构组织代码,实现了游戏初始化、雷区布置、坐标输入、雷数统计等功能。玩家可通过菜单选择开始或退出游戏,输入坐标进行排雷,若踩中雷则游戏结束,成功排查所有非雷区域即获胜。文章详细讲解了主要函数实现逻辑,包括棋盘初始化、雷区随机布置、周边雷数计算等核心功能,为后续功能扩展(如递归展开、难度选择)提供了基础框架。

2026-01-24 19:33:20 787

原创 C语言---分支与循环语句

本文介绍了C语言中的分支语句和循环结构。分支语句包括if语句和switch语句,if用于条件判断,switch适用于多分支情况。循环结构涵盖while、for和do-while三种循环方式,并比较了它们的执行流程和适用场景。此外,还讲解了break和continue在循环中的控制作用,以及goto语句的使用方法和注意事项。通过多个代码示例展示了这些语法结构的实际应用,帮助理解其执行逻辑和使用技巧。

2025-12-11 20:32:04 1016

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除