- 博客(40)
- 收藏
- 关注
原创 C++ map 底层与AVL 树
本文系统梳理 C++ std::map 底层基于平衡二叉搜索树(如 AVL、红黑树)、LeetCode 692 前 K 个高频单词的哈希+小顶堆解法,以及 AVL 树的定义、四种失衡情形与旋转修复机制。核心要点包括:operator[] 自动插入默认值,insert 失败不覆盖;堆比较器需按频次升序、同频字典序降序;AVL 树通过旋转维护高度差 ≤1,插入修复最多两步旋转,保证 O(log n) 操作效率。
2026-10-01 18:19:28
349
7
原创 刷题日记(带手写笔记版)--滑窗法,法将x减到0的最小操作数,水果成篮,找到字符串中所有字母异位词,串联所有单词的子串,最小覆盖子串
本文总结了滑动窗口算法在五道力扣题中的应用:1)将x减到0的最小操作数(转为求最大子数组和);2)水果成篮(最多两种水果的最大连续段);3)字母异位词查找(固定窗口匹配);4)串联所有单词的子串(多单词拼接问题);5)最小覆盖子串(最小窗口包含目标字符)。核心思想均为维护滑动窗口,通过双指针动态调整,结合哈希表统计字符/单词频次,实现高效求解。
2026-10-01 17:37:18
150
8
原创 C++进阶map和set的基本概念,关联容器和序列容器,set的基本操作,map容器详解,实践应用案例
本文详解C++ STL中set与map的特性与用法:二者基于红黑树实现,提供O(log N)的高效查找、插入与删除操作。set用于唯一有序集合,支持自动去重与集合运算;map实现键值映射,适用于词典、缓存等场景。强调使用find()而非[]避免意外创建元素,注意遍历时删除导致迭代器失效等问题。通过代码示例展示插入、查找、删除、遍历及自定义比较函数等核心操作,帮助开发者掌握其高效应用。
2026-09-26 14:02:09
171
3
原创 C++进阶--二叉搜索树的性质与遍历,增删查改操作,key_value操作场景,删除操作的常见陷阱
二叉搜索树(BST)基于“左小右大”性质,实现高效查找、插入与删除操作(平均O(log n))。删除操作分三类:叶子节点直接删;单孩子用子节点替换;双孩子则用右子树最小值(中序后继)替代并递归删除。需注意递归返回更新父节点指针,避免内存泄漏。最坏情况退化为链表,复杂度升至O(n),建议使用平衡树优化。适用于键值对快速检索,如字典、数据库索引等场景。
2026-09-26 13:50:02
292
3
原创 算法修炼chapter3 滑动窗口
滑动窗口是一种基于双指针的高效算法思想,通过维护一个动态窗口,将复杂的时间复杂度从O(n²)优化至O(n),适用于求解满足特定条件的连续子数组或子串问题。核心在于:右指针扩展窗口,左指针收缩窗口,保持窗口内元素满足条件。典型应用包括最小长度子数组(> target)、无重复字符最长子串、最多翻转k个0的最大连续1的个数等,均通过“进窗口—判断—出窗口—更新结果”的统一框架解决,体现了算法设计中的贪心与剪枝思想。
2026-09-15 23:59:19
205
4
原创 C++多态深入解析:多态概念,多态实现条件,虚函数表与内存分布,常见问题及注意事项
本文深入解析C++多态机制,涵盖运行时多态的三大实现条件:继承、虚函数与基类指针/引用。详解虚函数表(vtable)与虚函数表指针(vptr)的底层原理,强调纯虚函数与抽象类在接口设计中的作用,并警示缺省参数不参与多态、对象切割及非虚析构导致内存泄漏等常见陷阱。核心口诀“一虚二重写三指针”助你掌握多态精髓,适合面试准备与OOP基础巩固。
2026-09-15 23:56:43
176
3
原创 算法修炼 chapter 2 双指针进阶、盛最多水的容器、有效三角形的个数、两数之和、三数之和、四数之和
本章学习双指针技法在容器盛水、三角形判断、两数/三数/四数之和等问题中的应用,涵盖5道经典题。
2026-09-02 21:56:16
261
6
原创 C++继承第二讲--实现一个不可继承的类,友元在继承当中的陷阱,菱形继承解析
本文系统讲解继承体系的进阶知识点,涵盖不可继承类的设计、友元与静态成员的特性、菱形继承问题的本质及虚继承解决方案,以及继承与组合的设计哲学对比。每节均配有完整代码示例和避坑提醒,帮助读者建立扎实的面向对象设计基础。
2026-09-02 16:06:11
468
3
原创 C++进阶--继承的概念、三种继承方式、派生类和基类的转换、作用域与隐藏、默认成员函数调用规则,其他重要问题延申
C++ 的面向对象有三大特性:**封装、继承、多态**。封装让类有自己的边界,而继承让类之间产生"父子关系"——子类自动拥有父类的成员,还能在此基础上扩展新功能。这篇文章就带你把继承掰开揉碎,从最基本的概念问到最棘手的菱形继承,每一节都有代码示例和避坑提醒。
2026-08-31 20:41:25
295
1
原创 C++模板进阶--非类型模板参数、函数模板特化、模板分离编译问题、指针类型偏特化、总结与最佳实践
C++ 模板是泛型编程的核心,掌握其高级特性对于编写高质量、高性能的代码至关重要。本文面向有一定 C++ 基础的开发者,系统讲解模板编程中的进阶主题,包括**非类型模板参数**、**函数模板与类模板的特化**、**模板分离编译问题**以及**指针类型偏特化**。
2026-08-31 19:20:33
399
原创 刷题日记day2--字符判断函数详解、相关字符判断函数总结,string中与位置和迭代器有关的函数,size和length区别简介
本文主要介绍了算法题中经常会出现的字符判断函数,帮助我们在解算法题的时候事半功倍,以及string中与位置和迭代器有关的函数,便于我们访问string中的一些典型位置的值
2026-08-27 20:17:15
219
2
原创 刷题日记day1--string的特性、相关接口解析,四道算法题,substr、getline、find_first_of
本文记录C++字符串基础接口学习与算法刷题实战,涵盖4道题目 + 2个核心知识点。
2026-08-26 22:25:21
268
原创 C++ STL 容器与数据结构详解:deque 底层迭代器、priority_queue 优先队列、堆排序原理、冒泡排序泛型实现
本文系统讲解 C++ STL 中几个核心容器的底层实现原理及常用数据结构。主要内容包括:deque 的双端队列设计——通过中控数组(map)管理多个固定大小缓冲区,实现头尾 O(1) 操作的同时支持随机访问;priority_queue 优先队列的堆适配器机制及其默认大顶堆行为;堆(Heap)作为完全二叉树的数组映射关系,以及向上/向下调整算法和堆排序实现;冒泡排序的泛型函数对象模式。文章穿插代码示例与面试高频考点,帮助读者深入理解 STL 容器背后的设计思想。
2026-08-26 10:43:29
432
2
原创 C++ list第二讲数据结构修炼:迭代器源码 + 栈队列适配器 + LeetCode 三道高频题
本文从 C++ STL 迭代器原理出发,系统讲解栈(Stack)与队列(Queue)两种容器适配器的底层设计与典型应用场景。通过 LeetCode 155 最小栈、栈的压入弹出序列、二叉树层序遍历三道高频题,串联「迭代器 → 容器适配器 → BFS」的完整知识链,帮助读者理解数据结构选择背后的设计思想,并掌握用栈/队列解决经典算法问题的通用方法。
2026-08-23 12:27:46
571
4
原创 C++STL--list底层实现,迭代器分类,模拟list的迭代器封装、实现
本文深入解析C++ STL中list容器的底层实现原理,从四个核心维度展开: 迭代器特性:详细对比双向迭代器与随机访问迭代器的差异,分析list迭代器的类型和性能特点 内部结构:揭示循环双向链表+哨兵节点的精妙设计,通过图示展示push_back操作的具体实现 迭代器封装:对比普通实现与STL标准封装方式,给出符合规范的迭代器类模板实现 类型系统:完整梳理STL容器的成员类型定义体系 文章包含大量技术细节和示意图,适合希望深入理解STL设计思想的开发者阅读,为手写容器类提供扎实的理论基础。最后附有权威参考
2026-08-23 10:41:10
488
3
原创 C++--vector第二讲:手写 C++ STL:vector 源码剖析与迭代器失效分析
本文深入剖析了C++ STL中vector的底层实现与迭代器失效问题。首先解释了vector的三指针内存布局(_start、_finish、_end_of_storage)及size与capacity的区别。然后详细讲解了构造函数实现,特别是支持任意容器迭代器的区间构造模板。重点分析了reserve扩容时的深拷贝陷阱,指出memcpy浅拷贝会导致非POD类型数据错误。文章核心探讨了insert操作引发的迭代器失效现象,通过VS2019和Linux环境对比展示了失效后的程序崩溃表现,并给出正确使用方法。最后介
2026-08-19 21:06:29
372
5
原创 C++--vector底层,leetcode118杨辉三角实战,对于传统reserve的坑点,迭代器失效
深入理解 vector:从二维数组到 STL 源码剖析 本文系统性地探讨了 C++ vector 的实现原理与应用方法。主要内容包括: 二维数组实现:解析 vector<vector<int>> 的嵌套结构,对比外层对象数组与内层堆内存管理 模拟实现:通过 operator[] 展示模板实例化机制,分析 vector<int> 与 vector<vector<int>> 的底层差异 实战应用:以 LeetCode 118 杨辉三角为例,对比 C 指针数组与 vector 解法,突显自动内存管理优势 源码剖析
2026-08-19 20:24:39
421
2
原创 C++--深拷贝三件套 + swap + 写时拷贝 + vector 扩容 + reserve
本文深入探讨C++中string类的深拷贝、swap优化、容量管理等内容。首先介绍了string的构造/拷贝构造/赋值操作实现,提出通过swap实现高效安全的拷贝语义。其次分析了引用计数与写时拷贝(COW)机制,对比了VS和g++的底层实现差异。通过实验验证了不同编译器下vector的扩容策略:VS约1.5倍扩容,g++为2倍扩容。最后详细解析了reserve函数的作用机制,强调其只影响capacity不影响size的特性,并对比了string和vector的容量管理特点。
2026-08-17 11:38:28
215
6
原创 C++--一文打通:string 手写实现 + ASCII 码表 + UTF-8/GBK 编码
本文深入探讨C++ string的底层实现与字符编码原理。内容包括: 手写string核心操作:实现insert(字符/字符串)、erase、substr函数,分析扩容策略与数据移动逻辑 实际应用示例:使用find和substr提取文件后缀名 字符编码体系: ASCII编码原理与码表解析 字符存储本质:数值与符号的映射关系 Unicode标准与UTF-8/GBK编码方案对比 底层视角:通过内存地址观察字符串实际存储方式,理解从二进制到字符的解码过程 文章结合代码实现与编码理论,帮助开发者深入理解字符串在计算
2026-08-17 11:29:19
468
7
原创 C++STL容器string第二讲--string常用接口,插入删除接口,替换replace,正反向查找,模拟迭代器的实现和常用接口的模拟实现
本文介绍了C++ string类的常用接口及底层实现,重点内容包括: 核心操作: 增:append()多种重载实现字符串追加 删:erase()三种删除方式(位置/迭代器/区间) 改:replace()实现子串替换 查:find()/rfind()查找子串位置 截取:substr()获取子串 输入:getline()按分隔符读取 性能警示: erase和replace是性能杀手,需谨慎使用 底层实现: 迭代器本质是字符指针 通过reserve优化内存分配 模拟实现string类的基本结构 实用技巧: 使用r
2026-08-11 22:21:48
258
11
原创 C++STL容器string--迭代器,string的接口,string的遍历,访问方式
本文介绍了C++中迭代器与容器操作的基础知识,主要内容包括: 迭代器的作用与基本用法:迭代器是STL六大组件之一,提供统一访问容器元素的方式,类似指针但非指针。介绍了begin()/end()遍历方法。 范围for循环:简化容器遍历的语法糖,默认值拷贝,需加引用才能修改容器元素。 auto关键字:自动类型推导,简化长类型名,但有使用限制。 迭代器类型:四种迭代器(正向/反向、普通/const)的区别与适用场景。 const迭代器:const对象必须使用const迭代器访问。 reserve与reverse:
2026-08-11 22:11:08
338
8
原创 C++模板初阶与STL初探
摘要: 本文系统讲解了C++内存管理、模板与STL核心知识。首先剖析了C/C++程序内存区域划分(栈/堆/静态区等)及各区域特性。随后对比了malloc/free与new/delete的六大关键区别,包括初始化方式、失败处理机制及对自定义类型的支持差异。在模板部分,详细介绍了函数模板的隐式/显式实例化机制和类模板的定义方法,重点演示了动态数组模板的扩容实现。最后概述了STL六大组件(容器/算法/迭代器等)及其作为标准化软件框架的价值。全文通过代码示例与原理图示,为C++泛型编程和标准库使用奠定基础。
2026-08-08 11:08:31
215
原创 C++内存管理:编译器的优化、C++内存划分、new、delete关键字及其底层
本文详细讲解了C++内存管理的关键知识点。主要内容包括:1)类对象拷贝时编译器的优化机制;2)C++程序内存分区(栈区、堆区、数据段、代码段);3)new/delete与malloc/free的对比,重点分析new在底层调用operator new和构造函数的原理;4)强调new/delete必须配对使用的注意事项。文章通过实例演示编译器优化行为,解析内存分区本质是管理生命周期,并指出错误使用内存操作符会导致的问题,帮助读者掌握高效、正确的C++内存管理方法。
2026-08-08 09:19:49
316
2
原创 C++ 类和对象详解(4)初始化列表,static成员,友元,内部类,匿名对象
本文系统介绍了C++类和对象的核心概念,主要内容包括:1)初始化列表的语法规则与使用场景,强调const成员、引用成员等必须使用初始化列表;2)静态成员特性,说明其存储位置和访问规则;3)友元机制,分析友元函数和友元类的作用及设计考量;4)内部类的定义与封装特性;5)匿名对象的生命周期特点。文章通过对比不同初始化方式、成员访问规则等,帮助读者深入理解C++面向对象编程的关键技术要点。
2026-08-03 22:26:16
273
3
原创 C++类与对象详解(3)运算符重载、const 与类型转换
本文深入探讨了C++中类和对象的高级特性,以日期类为例,重点讲解了运算符重载、const成员函数和类型转换三大主题。在运算符重载部分,分析了流运算符作为全局函数实现的必要性,并介绍了友元函数的使用场景。const成员函数章节揭示了const对象的限制,强调只读函数应声明为const。类型转换部分通过单参数构造函数的隐式转换问题,引出explicit关键字的重要作用。文章最后给出了最佳实践建议:流运算符采用全局函数+友元形式,只读函数添加const修饰,单参数构造函数使用explicit,参数传递优先考虑co
2026-08-03 08:42:19
345
1
原创 C++ 类与对象详解(2)从默认成员函数到运算符重载
本文系统介绍了C++类与对象的核心概念,重点讲解了6个默认成员函数(构造函数、析构函数、拷贝构造、赋值运算符重载等)的实现原理和使用场景。文章深入分析了浅拷贝与深拷贝的区别,强调动态资源管理类必须实现拷贝控制成员,并详细讲解了运算符重载的规则与技巧(包括特殊运算符如++的重载方式)。最后提供了类设计的最佳实践表格和常见问题解答,为后续学习移动语义和智能指针等进阶内容奠定基础。全文兼顾理论深度与实践指导,适合有一定C++基础的开发者阅读。
2026-07-27 10:40:35
350
2
原创 C++类和对象详解(1)
本文摘要:C++类和对象核心概念详解,包括对象内存对齐规则(成员变量存储、空类占1字节)、this指针特性(隐式参数、栈区存储)、6个默认成员函数(构造/析构/拷贝构造等)。重点解析构造函数(初始化对象、可重载)和析构函数(资源清理)的使用场景,以及运算符重载规则(operator关键字、参数数量匹配运算对象)。文章强调构造/析构函数的实现必要性,并指出常见易错点如构造函数调用语法、this指针存储位置等,为后续学习拷贝构造等高级特性奠定基础。
2026-07-16 18:22:15
380
17
原创 C++ 基础核心概念精讲:引用、内联与 nullptr
摘要: 本文深入讲解C++核心概念,包括引用、内联函数和nullptr。引用作为变量别名,具有初始化强制、不可改绑等特性,常用于函数传参和返回值,但需注意返回局部变量引用的陷阱。const引用能处理常量和临时对象,遵循权限缩小原则。指针与引用在语法和底层实现上存在差异。内联函数通过代码展开提升效率,适合短小频繁调用的函数,但需避免声明定义分离。nullptr作为类型安全的空指针,解决了NULL的歧义问题。文章最后总结了最佳实践,强调合理使用这些特性以编写高效、安全的C++代码。
2026-07-12 20:32:43
662
7
原创 批量生成程序员--C++入门基础--那些你不可错过的C++教程
本文介绍了C++语言的基础知识和核心特性。主要内容包括:C++的发展历史和版本更新,应用领域涵盖系统软件、游戏开发、嵌入式等;基础语法如第一个C++程序、命名空间解决命名冲突问题;重要特性包括输入输出流、缺省参数、函数重载和引用机制。文章提供了学习参考文档和书籍推荐,适合C++初学者快速了解语言概貌。作者以通俗易懂的方式讲解技术要点,旨在帮助读者建立对C++的初步认识,为后续深入学习打下基础。
2026-03-27 22:33:51
451
3
原创 C语言数据结构--二叉树及堆相关方法
本文介绍了堆和二叉树的相关算法与应用。在堆部分,详细讲解了向下调整和向上调整算法,比较了两种建堆方式的时间复杂度,并分析了堆排序和TopK问题的实现方法。二叉树部分则涵盖了顺序/链式存储结构、前序/中序/后序/层序遍历的实现,以及计算树高、节点数和叶子节点数等基本操作。通过代码示例展示了各算法的具体实现,为数据结构学习提供了实用参考。
2026-02-16 17:50:11
929
3
原创 堆相关概念及基础方法一网打尽!
本文介绍了堆数据结构的概念、分类(大顶堆/小顶堆)及基于数组的存储方式。详细讲解了堆的初始化、销毁、插入(使用向上调整算法)、删除(使用向下调整算法)等核心操作,并提供了完整的C语言实现代码。文章还简要介绍了利用堆特性实现的堆排序算法,通过建立小堆并反复交换堆顶元素实现降序排列。所有代码已开源,为理解和实现堆结构提供了完整参考。
2026-02-13 21:49:41
1059
5
原创 Java变量与数据类型全解析
本文摘要介绍了Java编程基础中的核心概念,主要包括: 变量与数据类型:详细讲解了字面量分类、变量定义格式及注意事项,以及基本数据类型(整数、小数、字符、布尔)的存储规则和取值范围 计算机存储原理:解释二进制存储方式,说明不同类型数据的存储单元差异 标识符规范:明确命名规则,强调驼峰命名法的使用建议 键盘输入:演示Scanner类的使用方法及不同数据类型的接收方式 运算符与类型转换:涵盖算术运算符的使用、数值拆分练习,以及隐式转换和强制类型转换的区别 全文通过表格对比、代码示例和注意事项说明,系统性地呈现了
2026-02-06 21:22:15
839
3
原创 C语言数据结构--二叉树和堆
本文介绍了树和二叉树的基本概念及性质。树是一种非线性数据结构,具有层次关系,由根节点、子节点等组成。重点讲解了二叉树的概念、特殊类型(满二叉树和完全二叉树)及其重要性质。文章还对比了数组顺序存储和链式存储的优缺点,并引出堆的概念,说明堆是完全二叉树的一种特殊形式,需要同时满足结构规则和值的大小规则(大根堆/小根堆)。最后指出堆与普通完全二叉树的区别在于必须符合特定的值排序规则。
2026-02-06 18:40:58
872
2
原创 java入门----JDK和IDEA下载安装环境搭建保姆级教学
本文主要简单讲解了上面是java以及我们为什么要学java,java有何优势,详细地讲解了如何搭建java编程环境和IDEA,IDEA是java开发很有用的工具。接着我们利用IDEA编写了我们第一个JAVA程序,后续会简单介绍IDEA的相关外貌设置和重点的JAVA语法讲解。本文存在的任何错误请求指点,大家一同进步!
2026-02-04 22:51:19
1141
5
原创 C语言顺序表实战:打造简易通讯录
本文基于顺序表实现了一个简易通讯录系统。首先介绍了顺序表的结构特点及其基本操作方法,包括初始化、增删查改等。然后详细阐述了通讯录的数据结构设计,将联系人信息封装为结构体。系统实现了通讯录的初始化、销毁、添加、删除、展示、查找和修改等核心功能,并设计了用户交互菜单。最后通过功能测试验证了系统的可行性。该通讯录系统可作为顺序表应用的典型案例,后续可结合文件操作实现数据持久化存储。
2026-01-31 21:53:47
908
8
原创 C语言数据结构入门——顺序表
数据结构是“数据”和“结构”两词组合而来的,一段文字,视频,图片,新闻都可以算作数据,数据是一个非常大的范围。当我们想要大量使用同一类型的数据时,通过手动定义大量的独立变量对于程序来说可读性非常差,我们需要借助数组这样的数据结构将大量的数据组织在一起,所以结构也可以理解为组织数据的方式,数组是最基础的数据结构。数据结构是计算机储存、组织数据的方式。数据结构是指互相之前存在一种或多种特定关系的数据元素的集合。数据结构反映数据的内部构成,即数据由哪部分构成,什么方式构成,以及数据元素之间呈现的结构。
2025-12-12 22:31:06
779
原创 一篇弄懂函数栈帧的创建与销毁
本文深入解析了函数栈帧的工作原理及其在程序运行中的关键作用。函数栈帧是函数调用时在调用栈上开辟的空间,用于存储参数、局部变量和上下文信息。文章通过VS2019调试演示,详细展示了函数栈帧的创建和销毁过程,包括寄存器操作、参数传递机制和返回值处理。特别解释了局部变量未初始化时出现随机值的原因(初始化为0xCC),以及形参作为实参临时拷贝的本质。理解函数栈帧机制有助于掌握函数调用的底层实现,包括参数传递顺序、局部变量创建和返回值传递等核心问题。
2025-12-01 21:12:34
954
1
原创 C语言入门指南:从零到精通
C语言中如何显示字符串的呢?使用双引号括起来的一串字符就被称为字符串,如:“abcdef”,就是一个字符串。C语⾔字符串中⼀个特殊的知识,就是在字符串的末尾隐藏放着⼀个\0字符,这个\0字符是字符串的结束标志。对于字符串"abcdef",我们实际上看到了6个字符:a,b,c,d,e,f,但是实际上在末尾还隐藏⼀个\0的转义字符,\0是字符串的结束标志。所以我们在使⽤库函数printf()打印字符串或者 strlen() 计算字符串⻓度的时候,遇到\0的时候就⾃动停⽌了。
2025-11-08 18:17:44
863
原创 C语言入门指南:从零到精通
本文介绍了C语言的基础知识。C语言是一种广泛应用于计算机编程的高级语言,最初为Unix系统开发而设计。文章解释了C语言程序需要通过编译器编译链接生成可执行文件,并推荐使用VS2022作为开发工具。通过"Hello World"示例展示了基本程序结构,强调了main函数作为程序入口的重要性。还介绍了printf等库函数的使用方法、C语言的32个关键字以及字符与ASCII编码的关系。文中提供了ASCII码参考链接,并举例说明如何打印字符和可打印字符集。
2025-11-05 22:52:25
788
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅