自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 linux系统编程:初识进程

狭义 OS(内核 Kernel):核心四大模块 —— 进程管理、内存管理、文件管理、驱动管理;广义 OS:内核 + shell 外壳、C 标准库、系统工具等应用软件。

2026-07-31 16:43:07 172

原创 linux入门:基础开发工具

软件包 = 预编译好的程序(类似 Windows 安装包),存放在。国内云服务器通常已配置好国内镜像源,无需手动更换。好处:一次写好,自动推导依赖,只编译修改过的文件。会自动找第一个目标,递归推导依赖,一次只能执行一个安装任务。:定义编译规则的脚本文件。:回到 gdb 命令屏。display 变量。

2026-07-28 16:39:34 235

原创 Linux入门:简要认识Linux和基础指令

本文摘要: Linux系统核心知识速查指南,包含操作系统定位(用户与硬件中间层)、服务器常用命令行原因、主流发行版特点。重点讲解Linux目录树结构(/为根)、绝对/相对路径使用场景。提供基础命令手册:ls/pwd/cd等目录操作,cat/less等文件查看,find/grep等搜索工具,zip/tar压缩解压技巧。深入解析权限体系(rwx、chmod/chown)、用户分类及粘滞位特殊权限。附实用工具(date/cal/bc)和热键(Tab补全/Ctrl+C终止),涵盖Shell工作原理与生产环境操作规范

2026-07-24 22:03:46 451

原创 深入红黑树:从STL源码到亲手封装 map 和 set

这篇文章深入解析了C++ STL中map和set的底层实现原理。通过分析源码框架,揭示了它们共用同一红黑树数据结构的关键设计:1. 模板参数的精妙运用:通过Value模板参数控制节点存储数据类型(set存Key,map存pair<Key,T>),KeyOfValue参数实现不同类型数据的键提取。2. 迭代器实现的核心机制:中序遍历逻辑处理operator++和operator--,包括右子树处理、祖先路径回溯等特殊情况。3. 容器适配层的设计:map通过select1st提取键,set直接使用键

2026-05-10 21:50:35 425 4

原创 C++ 异常处理全解析:从基础概念到工程实践

本文深入讲解了C++异常处理机制,主要内容包括: 异常处理的核心概念:对比C语言错误码方式,阐述C++异常的优势(信息丰富、解耦处理)与劣势(性能开销)。 异常处理基础语法:通过throw抛出异常,try-catch捕获处理,演示除零错误的完整处理流程。 关键机制:详细解析栈展开的执行过程,异常类型的匹配规则(含3种特例转换),以及重新抛出异常的应用场景。 工程实践:展示异常继承体系设计,通过基类引用统一捕获多态异常,并实现HTTP请求的重试机制。 异常安全:重点分析资源泄漏问题和解决方案(RAII机制),

2026-05-07 10:30:14 424

原创 C++ 红黑树:从规则到实现,手把手带你写一棵红黑树

红黑树是一种自平衡二叉搜索树,通过颜色标记和旋转操作维护近似平衡,确保操作时间复杂度为O(logN)。其核心特性包括:结点非红即黑、根结点为黑、无连续红结点、路径黑高相同。相比AVL树,红黑树旋转次数更少,适合频繁插入删除场景。插入操作需处理三种情况:叔叔为红时变色调整;直线型需单旋+变色;折线型需双旋+变色。验证时需检查颜色规则和路径黑高。红黑树广泛应用于STL、Linux内核等底层数据结构中。

2026-05-04 23:11:33 411

原创 C++11 核心特性全解析:,一篇吃透现代 C++ 基石

C++11是现代C++编程的重要里程碑,引入了多项革命性特性:统一初始化语法简化了各类对象的初始化方式;右值引用和移动语义大幅提升了性能,解决了深拷贝开销问题;可变参数模板增强了泛型编程能力;lambda表达式支持匿名函数;类功能扩展包括默认移动操作和成员初始化;新增了function和bind统一可调用对象接口。这些特性共同推动C++从传统向现代转型,在保持高性能的同时提升了开发效率和代码可维护性,为后续C++标准奠定了基础。

2026-05-03 11:59:56 405

原创 C++ AVL 树:平衡原理到完整实现(自平衡二叉搜索树)

AVL树是一种自平衡二叉搜索树,由前苏联科学家Adelson-Velsky和Landis于1962年提出。它通过严格控制每个结点的左右子树高度差(不超过1)来避免普通BST在有序插入时退化为链表的问题,确保所有操作的时间复杂度稳定在O(logN)。文章详细介绍了AVL树的核心概念、结点结构设计、插入操作流程(包含平衡因子更新规则)以及四种旋转调整方法(右单旋、左单旋、左右双旋和右左双旋),并提供了平衡校验的实现方法。AVL树虽然因严格的平衡要求导致旋转次数较多,但为理解更高级的数据结构奠定了基础。

2026-04-24 14:02:02 400

原创 C++ 模板全解:从泛型编程初阶到特化、分离编译进阶

本文深入讲解C++模板编程,涵盖模板基础与高级特性。首先介绍泛型编程概念,通过Swap函数案例展示模板的代码复用优势。详细解析函数模板的原理、实例化方式和匹配规则,以及类模板的定义与使用。进阶部分探讨非类型模板参数、模板特化(函数/类模板全特化与偏特化)等高级特性,并分析模板分离编译问题及解决方案。最后总结模板在代码复用方面的优势与可能导致代码膨胀的缺点。文章通过丰富案例帮助读者全面掌握C++模板编程技术,为理解STL底层实现奠定基础。

2026-04-23 17:55:47 391

原创 C++ 二叉搜索树 (BST) :从核心原理到完整代码实现

二叉搜索树中序遍历一定有序增删查改:最好O(logN),最坏O(N)左右孩子都存在时用替换法实际用平衡树(AVL / 红黑树)保证稳定效率是底层核心结构。

2026-04-20 17:45:42 168

原创 C++ STL list 原理到模拟实现

本文全面解析C++中list容器的底层实现与核心特性。list采用带头结点的双向循环链表结构,具有动态内存分配、高效插入删除(O(1))的特点,但不支持随机访问。文章详细介绍了list的构造函数、迭代器使用、增删改查等常用接口,重点分析了迭代器失效问题(仅删除操作会使当前迭代器失效),并提供了正确的删除操作写法。通过模拟实现list节点结构、迭代器模板和list本体,揭示了其内部工作机制。最后对比了list与vector的核心差异:list适合频繁插入删除场景,而vector更适合随机访问需求。掌握这些特性

2026-04-09 20:08:21 413

原创 C++ STL vector 原理到模拟实现

本文系统介绍了C++ vector容器的核心概念与实现要点。vector作为动态数组,底层采用连续存储,维护_start、_finish、_end_of_storage三个指针,支持随机访问。关键特性包括:尾部操作O(1)、中间操作O(N),扩容机制在不同编译器下分别为1.5倍或2倍增长。文章详细解析了构造函数、容量操作(reserve/resize)、增删改查等核心接口,重点强调迭代器失效问题及解决方法(如erase后需重新获取迭代器)。特别指出深拷贝的必要性,禁止使用memcpy以避免资源重复释放。最后

2026-04-08 23:37:34 223

原创 C++ 运算符重载详解:从入门到理解

C++运算符重载核心要点总结 运算符重载是C++面向对象编程的重要特性,需掌握以下关键点: 禁止重载的运算符:. .* :: ?: sizeof 必须作为成员函数重载的运算符:= [] () -> 重载规则:必须包含自定义类型、不改变优先级/结合性/操作数个数、不创建新运算符 返回引用的情况:赋值=、下标[]、前置++/--、流操作符<< >> 返回值的情况:算术运算、后置++/--、比较运算 成员函数与全局函数的区别:成员函数隐含this指针,参数少一个 特别注意运算符重载要

2026-03-28 11:43:36 743 3

原创 二叉树从入门到精通:概念、结构与核心实现全解析

树是由n(n≥0)个有限结点组成的层次关系集合有且仅有一个根结点,根结点无前驱;除根外,每个结点有且仅有一个父结点,可以有 0 个或多个后继;子树之间互不相交,一棵N个结点的树必有N-1条边;树的定义是递归的,即每个子树也都是一棵独立的树。集合为空(空二叉树);由一个根结点 + 两棵互不相交的左子树和右子树组成,且左、右子树也都是二叉树。核心约束二叉树中不存在度大于 2 的结点(每个结点最多有 2 个孩子);二叉树的子树有左右之分,次序不能颠倒(是有序树。

2026-03-25 16:34:52 930

原创 吊打面试官:手撕堆排序与 Top-K 问题的最优解

堆是一种完全二叉树结构的优先队列,逻辑上分为大根堆和小根堆,物理存储采用数组实现。核心算法包括向上调整(O(logn))和向下调整(O(logn)),其中向下调整建堆的时间复杂度为O(n),优于向上调整的O(nlogn)。堆排序通过建堆和交换堆顶元素实现升序或降序排列。Top-K问题利用小根堆高效找出最大K个数,时间复杂度为O(K+(N-K)logK)。常见误区包括误判建堆复杂度为O(nlogn)和Top-K错误使用大根堆。堆结构在排序和查找问题中具有高效的空间和时间复杂度优势。

2026-03-22 16:15:28 979

原创 VS2026背景插件安装全攻略(自定义背景)

本文介绍了VS2026背景插件安装的两种方法:1)推荐在线安装方式,通过拓展管理面板搜索安装;2)离线安装方案,下载.vsix文件手动安装。安装完成后,需在ClaudiaIDE设置中配置本地图片路径(建议PNG/JPG格式),并可调整透明度、对齐方式等参数。全文提供了从安装到配置的完整操作指引,帮助用户实现个性化IDE背景设置。

2026-03-21 00:02:00 745 1

原创 C++ string 类常用接口解析(附代码介绍)

本文详细介绍了C++中std::string类的使用方法,主要包括六个方面:1)初始化与赋值方式,展示多种构造方法;2)长度与容量操作,如size()、resize()等;3)字符访问与修改接口,包括[]、at()、append()等;4)字符串查找与替换功能;5)拼接与比较操作;6)其他常用功能如c_str()转换。string类封装了字符数组操作,提供了安全便捷的接口,是C++处理字符串的首选工具,相比C风格字符串更安全高效。使用时需注意边界检查和异常处理。

2026-03-20 18:53:42 339

原创 栈(Stack)和队列(Queue)—从原理到C代码实现

本文介绍了栈和队列两种线性数据结构。栈遵循LIFO原则,最优实现为动态数组,提供Push/Pop等操作,核心是栈顶指针管理。队列遵循FIFO原则,最优实现为单链表,需维护队头/队尾指针。还介绍了循环队列的数组实现,通过取模运算解决空间浪费问题,需注意队空(front==rear)和队满((rear+1)%capacity==front)的判定条件。两者核心区别在于操作规则:栈后进先出,队列先进先出。实现时需注意内存管理和指针维护。

2026-03-19 21:55:00 311

原创 C++ 类和对象(下):核心进阶知识点超详细讲解

本文深入探讨了C++类和对象的七大进阶知识点:1. 构造函数的初始化列表是成员变量真正的初始化位置,必须用于引用、const成员和无默认构造的自定义类型成员;2. 类型转换机制支持内置类型与类类型的隐式转换,可通过explicit关键字限制;3. static成员实现类内共享数据,替代全局变量;4. 友元机制突破封装限制,但应慎用;5. 内部类实现专属封装,默认具有友元特性;6. 匿名对象适合临时使用,生命周期仅限当前行;7. 编译器会对对象拷贝进行优化,减少临时对象创建。这些知识点是理解C++面向对象编程

2026-03-18 20:34:12 809

原创 C++ 类和对象(中):默认成员函数超详细入门讲解

C++默认成员函数是面向对象编程的核心概念,主要包括构造函数、析构函数、拷贝构造函数和赋值运算符重载。构造函数负责对象初始化,析构函数处理资源清理,拷贝构造函数实现对象克隆,赋值运算符重载完成对象赋值。编译器会自动生成这些函数的默认版本,但对堆资源管理的类需要手动实现深拷贝以避免内存问题。其中构造函数可重载,析构函数唯一,拷贝构造参数必须是引用,赋值重载需处理自赋值。理解这些函数的特性和适用场景,是掌握C++对象生命周期管理的关键。const成员函数和取地址重载在实际开发中较少需要自定义实现。

2026-03-17 20:49:25 947 1

原创 C++ 类和对象(上):基础核心知识点超详细入门讲解

类是 C++ 实现面向对象的核心,是对 数据(属性)和操作数据的方法(函数)的封装,相当于自定义了一个新的类型,后续可以用这个类型创建对象。用class关键字定义,语法固定,结尾的分号不能省略class 类名// 访问限定符:public/protected/private访问限定符:成员变量;// 类的属性,描述对象的特征成员函数;// 类的方法,描述对象的行为// 分号必须加!示例(栈类)public:// 成员函数:操作栈的方法// 初始化// 入栈int Top();// 取栈顶。

2026-03-16 21:54:45 803

原创 单链表 —— 从原理到 C 语言实现

尾插需要考虑两种情况:链表为空、链表非空。尾删需考虑两种情况:链表只有一个节点、链表有多个节点。需区分两种情况:插入位置是头节点、插入位置是中间 / 尾节点。遍历链表,找到数据等于目标值的节点并返回其地址,未找到则返回。10. 删除指定位置后节点(SLEraseAfter)9. 指定位置后插入(SLInsertAfter)首先我们需要定义单链表的节点结构,每个节点包含。指针域:存储下一个节点的地址,实现节点的串联。7. 指定位置前插入(SLInsert)8. 删除指定位置节点(SLErase)

2026-03-14 21:16:37 398

原创 数据结构入门:顺序表(C语言实现)

操作时间复杂度随机访问O(1)尾插 / 尾删O(1)头插 / 头删O(n)指定位置插入 / 删除O(n)查找O(n)顺序表是数据结构入门第一站,内存连续存储动态内存管理增删改查的基本思想为后续链表、栈、队列打下基础。

2026-03-14 00:19:29 505

原创 C++ 入门基础核心知识点梳理,从基础语法到核心特性

定义命名空间,使用namespace关键字,后跟命名空间名称,再用{}包裹成员,命名空间中可以定义变量、函数、类型,甚至嵌套其他命名空间。// 定义名为bit的命名空间// 命名空间内的rand,和全局的rand函数完全隔离// 定义函数// 定义类型int val;int main()// 默认访问全局的rand函数(函数指针)// :: 是域作用限定符,指定访问bit命名空间中的rand// 调用命名空间中的函数return 0;// 嵌套命名空间pg。

2026-03-12 12:29:13 1007 1

原创 C 语言内存操作函数入门:memcpy、memmove、memset、memcmp

作为 C 语言初学者,我们经常需要对一块内存进行复制、移动、填充或比较等操作。掌握这四个函数,能让你在处理 C 语言中的内存数据时更加得心应手。它们是构建更复杂数据结构和算法的基础工具。用于从源内存块复制指定数量的字节到目标内存块。它不检查目标缓冲区的大小,因此必须确保目标缓冲区足够大,以容纳。那样从低地址向高地址复制,就会覆盖掉还没复制的源数据。如果内存区域重叠,行为是未定义的,此时应使用。个字节设置为指定的值。功能非常相似,都是复制内存。,并且它们的内存区域有重叠。是错误的,它会把每个字节都设为。

2026-03-07 13:16:40 741

原创 C语言:字符函数 & 字符串函数超全总结(用法 + 模拟实现)

熟练掌握这些函数的使用和原理,不仅能提升代码效率,还能加深对 C 语言内存管理的理解。是字符串查找函数,用于在一个字符串(haystack)中查找另一个字符串(needle)首次出现的位置。是字符串比较函数,用于比较两个字符串的内容。是字符串分割函数,用于将一个字符串按照指定的分隔符分割成若干个 “令牌”(token)。函数内部会维护一个静态指针,记录下一次分割的起始位置,因此它不是线程安全的。是字符串追加函数,用于将一个字符串追加到另一个字符串的末尾。是字符串拷贝函数,用于将一个字符串的内容(包括。

2026-03-06 21:58:51 380

原创 C语言入门:指针逆袭,看完这篇彻底搞定指针

类型 *指针变量名;int *p→ 指向 int 类型变量的指针char *p→ 指向 char 类型变量的指针float *p→ 指向 float 类型变量的指针重点:指针的类型,决定了它指向什么类型的数据,以及步长多大。一级指针存变量地址,二级指针存一级指针的地址。int a = 10;pp是二级指针*pp拿到p**pp拿到a指针就是地址,指针变量就是存地址的变量解引用找到目标,取地址指针 + 1 = 跳过一个类型大小数组名 ≈ 首元素地址函数指针 = 函数入口地址,用来回调、解耦。

2026-03-03 16:42:02 1026

原创 C语言入门:简单的扫雷游戏!

通过这种方式,玩家能够根据自身需求,在菜单所提供的各项功能中做出选择,比如开始游戏,退出游戏等等,从而让游戏具备良好的交互性与可操作性。当我们真正开始扫雷时,如果仅仅使用一个棋盘,那么在排雷过程中,当我们排查到某个位置本身没有雷,但它周围却存在一颗雷的情况时,就会出现歧义。其中一个棋盘专门用于存放雷的分布信息,而在排查过程中所获取到的信息,比如某个位置周围雷的数量等,则放到另一个棋盘上。按照这样的思路,我们就可以定义一个二维数组,将 “1” 放置在有雷的位置,“0” 放置在空位置上。接下来是运行的效果图。

2026-01-14 21:50:03 917

原创 C语言入门:函数逆袭,简单理解函数

了解了库函数,我们的关注度应该聚焦在自定义函数上,自定义函数其实更加重要,也能给程序员写代码更多的创造性。

2026-01-11 17:59:40 868

原创 C语言入门:数组の逆袭,简单吃透数组

数组是⼀组相同类型元素的集合;从这个概念中我们就可以发现2个有价值的信息:•数组中存放的是1个或者多个数据,但是数组元素个数不能为0。•数组中存放的多个数据,类型是相同的。数组分为⼀维数组和多维数组,多维数组一般比较多见的是二维数组。

2026-01-10 23:55:44 1337

原创 C语言入门:分支与循环其实没那么难!

1)分支:就好比我们面对岔路口时选路走,早晨出门时会想“如果下雨,我就带伞,如果不下雨,我就不带伞”。这种根据不同的条件选择不同的逻辑,就是分支,在C语言中对应着if-else,switch这两个语法。2)循环:就是“重复做着一件事”,比如早晨起床“起床 -->洗漱-->出门”,这种重复执行某段操作的逻辑就是循环。C语言中对应的是for,while,do-while这三个语法。结构类型具体语法适用场景分支结构if单条件选择if-else双条件选择switch多值匹配(固定值判断)

2026-01-08 22:50:33 686

原创 C语言入门:常见概念和数据类型,变量

变量是数据类型的具体实例,定义变量的本质是向内存申请一块指定大小的空间,用于存储对应类型的数据。1.变量定义的基本格式数据类型 变量名;数据类型 变量名 = 初始值2.变量名的命名规则只能由字母a-z、A-Z数字0-9和下划线_组成;不能以数字开头不能使用C语言的关键字(如int、char、if、for等)区分大小写。

2026-01-08 15:31:54 492

空空如也

空空如也

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

TA关注的人

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