自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 从零手写红黑树(C++实现详解)

学完AVL树之后对我来说,红黑树可能更容易理解,还有水了这么多篇,该认真写一篇了,哈哈哈哈。红黑树顾名思义就是得有红色和黑色的树,红黑树利用红色和黑色节点来创建二叉平衡搜索树红黑树的5条核心特点:(1)每个节点是红色或黑色(2)根节点必须是黑色(3)所有叶子节点(NIL/空节点)是黑色(NIL节点是红黑树中所有空指针的替代节点,表示树的叶子位置。(4)红色节点的子节点必须是黑色(即不能有连续的黑色节点)(5)从任意节点到其所有叶子节点的路径上,黑色节点的数量相同。

2025-07-19 22:31:43 2405 17

原创 C++ AVL树实现详解:平衡二叉搜索树的原理与代码实现

AVL树是最早被发明的自平衡二叉查找树,由G. M. Adelson-Velsky和E. M. Landis在1962年的论文中提出。本文将详细介绍AVL树的原理,并通过C++代码实现一个完整的AVL树结构。平衡因子 = 右子树高度 - 左子树高度在AVL树中,每个节点的平衡因子只能是-1、0或1。当插入或删除节点导致平衡因子的绝对值超过1时,就需要通过旋转操作来恢复平衡。// 键值对// 左子节点// 右子节点// 父节点int _bf;// 平衡因子: _kv(kv)

2025-07-17 22:09:13 472 10

原创 C++ Map 和 Set 详解:从原理到实战应用

实现,提供了高效的查找、插入和删除操作。本文将深入探讨它们的。是两种非常重要的关联容器,它们基于。在 C++ STL(标准模板库)中,

2025-07-12 22:25:30 599 14

原创 进程概念:初级指令的认识

一个函数是如何做到返回两次的?我的理解就是先展示了父的进程中的数据,然后子进程也要招式数据,它的数据没有,只能在展示一下父的数据。从图中我们可以知道,ppid一般是不变的,而pid结束在生成就会改变,这是因为系统创建了bash储存了ppid。给父进程返回pid,给子进程返回0,为什么?返回不同的返回值,是为了区分不同的执行流,执行不同的代码块。fork的英文意思是叉子,在这里是分叉的意思,所以它会运行两个分支,一个是父进程,一个是子进程。ppid和pid ppid可以理解为是pid的父亲。

2025-07-03 11:23:57 142 4

原创 C++ 搜索二叉树(BST)详解:实现与应用

搜索二叉树是数据结构与算法中的重要内容,掌握它的实现原理和应用场景对于提升编程能力非常有帮助。本文详细介绍了C++中BST的实现方法,包括基本操作和高级功能,并展示了它在实际中的应用。理解这些内容将为学习更复杂的数据结构打下坚实基础。希望这篇博客对你理解和使用搜索二叉树有所帮助!如果有任何问题,欢迎在评论区留言讨论。

2025-06-08 11:10:01 596 17

原创 C++虚函数与类对象模型深度解析

在C++中,虚函数是实现运行时多态(动态绑定)的核心机制,而虚函数表(vtable)和虚表指针(vptr)是实现这一机制的关键。理解虚函数在类对象模型中的存储方式,对于深入掌握C++面向对象编程至关重要。维护一个独立的虚函数表。如果派生类新增虚函数,它们会附加到。,存储所有虚函数的地址。每个对象的内存布局中,当一个类包含虚函数时,编译器会为该类生成一个。存储指向虚函数表的指针(在多重继承中,派生类会为。

2025-05-25 16:39:34 1053 10

原创 C++ 继承详解:基础篇(含代码示例)

继承(Inheritance)是面向对象编程(OOP)的核心特性之一,它允许一个类(派生类/子类)继承另一个类(基类/父类)的成员(变量和函数),从而实现代码复用和层次化设计。如果派生类定义了与基类同名的函数(即使参数不同),基类的函数会被隐藏,除非显式调用。

2025-05-24 13:03:59 347 4

原创 C++ 反向迭代器(Reverse Iterator)实现详解

反向迭代器是STL中一种重要的适配器,它允许我们以相反的顺序遍历容器。本文将详细讲解如何实现一个自定义的反向迭代器模板类。

2025-05-24 11:37:04 327 1

原创 手撕C++STL list:深入理解双向链表的实现

在C++ STL中,list是一个基于的容器,支持高效的头尾插入/删除操作(O(1)时间复杂度),但不支持随机访问(O(n)时间复杂度)。本文将带你list,并分析其核心实现。

2025-04-24 16:50:30 1186 20

原创 C++ 迭代器失效详解:如何避免 vector 操作中的陷阱

是指在对容器进行某些操作(如插入、删除)后,原本有效的迭代器变得不可用,继续使用它会导致。不同的容器有不同的迭代器失效规则,本文主要讨论 vector。是一种类似指针的对象,用于遍历 STL 容器(如。,如程序崩溃、数据错误等。

2025-04-18 10:55:08 797 21

原创 (centos)gdb的保姆级教学!!!

p与display都类似于vs中的监视,但是p运行过后之后再进行下一步就不会显示对应的内容,而display运行过后再进行下一步就会显示对应的内容。disable的用法就是让设置的断点还存在,但不删除断点,运行时会忽视disable设置的断点。s类似于vs中的F11(逐语句),同样也可以 s+连续的enter来连续s的操作。n类似于vs中的F10,是逐过程,也可以用n+连续的enter来连续n的操作。b+行号就是断点的意思,类似于vs中的F9,info + b,就是查看断点。

2025-04-13 16:29:37 756 21

原创 从零手撕C++ string类:详解实现原理与优化技巧

是日常开发中最常用的类之一,但你是否好奇它的底层实现?本文将带你从零实现一个简化版。),覆盖构造、拷贝、动态扩容、运算符重载等核心功能,并分析常见陷阱与优化方法。:C++初学者、面试备战者、对STL底层感兴趣的开发者。通常经过高度优化,比手动遍历更高效。

2025-03-24 22:26:04 1211 20

原创 Linux 中 Git 使用指南:从零开始掌握版本控制

Git 是一个分布式版本控制系统,用于跟踪文件的修改历史,帮助开发者高效协作和管理代码。无论是个人项目还是团队开发,Git 都是不可或缺的工具。

2025-03-15 16:14:34 838 17

原创 C++ 模板初阶:从模板参数到模板类与类模板

特性模板类类模板定义通过模板参数生成的具体的类模板的定义,生成类的蓝图实例化已经实例化为具体的类需要通过模板参数实例化为具体类使用方式直接使用需要指定模板参数模板参数分为类型参数和非类型参数,使用时需要注意作用域、默认值和推导规则。模板类是通过模板参数生成的具体的类,而类模板是生成类的蓝图。掌握模板的基本用法是理解 C++ 泛型编程的关键。

2025-03-02 22:52:44 491 22

原创 C++ 内存管理:深入理解 new、malloc、delete 和 free

newnew是 C++ 的关键字,用于动态分配内存并返回指向该内存的指针。对于内置类型(如intdouble),new会调用构造函数(如果有)并初始化内存。示例:// 分配内存并初始化为 10mallocmalloc是 C 标准库函数,用于分配指定大小的内存块。对于内置类型,malloc只分配内存,不会初始化。示例:// 分配内存,未初始化new对于自定义类型(如类或结构体),new不仅分配内存,还会调用构造函数。示例:public:// 分配内存并调用构造函数。

2025-03-02 22:32:02 738 8

原创 从入门到精通:Linux 权限管理(rwx/chmod/chown)

想象一下,你的 Linux 服务器存放着重要数据,如何防止他人误删文件?如何让团队协作时部分文件可编辑、部分只读?这一切都依赖 Linux 的权限系统。它通过“屏蔽”某些权限位,确保新建文件或目录的权限符合安全规范。(权限掩码)是 Linux 中一个关键参数,用于控制。),因为普通文件默认不应有执行权限(避免安全隐患)。,但为了方便记忆,可简化为“减法”。

2025-03-01 09:47:41 1127 6

原创 C++类与对象深度解析(二):从const 、new 、delete到函数操作符与友元函数的编程实践

在C++中,运算符重载和友元函数是面向对象编程的重要特性。而友元函数则允许外部函数访问类的私有成员。)用于将一个对象的值赋给另一个对象。但对于自定义类型(如类或结构体),我们需要通过重载赋值运算符来实现特定的赋值逻辑。例如,实现一个类的加法运算符重载,并允许外部函数访问私有成员。)是一个非成员函数,但它可以访问类的私有成员和受保护成员。静态成员变量属于类,而不是类的某个对象。静态成员函数属于类,而不是类的某个对象。可以用于修饰变量、函数和类成员,具有不同的作用。成员函数表示该函数不会修改类的成员变量。

2025-02-26 21:55:44 907 10

原创 C++类与对象深度解析(一):从引用、内联函数到构造析构的编程实践

拷贝构造函数是一个特殊的构造函数,用于通过已存在的对象创建一个新对象。用已有对象初始化新对象对象作为函数参数传递(值传递)对象作为函数返回值(值返回)默认的拷贝构造函数是浅拷贝直接复制成员变量的值(包括指针地址)如果类中有指针成员,会导致多个对象指向同一块内存需要手动实现拷贝构造函数为指针成员分配新的内存复制指针指向的内容,而不是复制指针地址浅拷贝深拷贝复制内容复制指针地址复制指针指向的内容内存安全性多个对象共享同一内存,易导致崩溃每个对象拥有独立内存,安全可靠。

2025-02-19 17:39:44 827 16

原创 彻底搞懂 C++ 中的命名空间、重载函数与缺省参数

命名空间:避免命名污染。函数重载:提高代码复用性。缺省函数:简化函数调用。

2025-02-14 21:51:29 469 8

原创 七大排序算法详解:从原理到实现(希尔/堆排/快排/归并等)

两部分,每次从未排序部分取出第一个元素,在已排序部分从后向前扫描,找到合适的位置插入。时间复杂度:平均O(n log n),最坏O(n²)(可通过随机选pivot优化)。:选基准值(pivot),将数组分为“小于pivot”和“大于pivot”两部分。基准值(pivot),将数组分为“小于pivot”和“大于pivot”两部分。:交换堆顶元素(最大值)与末尾元素,缩小堆范围并重新调整堆,重复直至有序。时间复杂度:最好O(n)(已有序),平均O(n²)。时间复杂度:最好O(n)(已有序),平均O(n²)。

2025-02-10 22:56:10 1211 10

原创 新手关于学习二叉树的感悟

1.根 2.子树:一个节点含有子树的个数称为该节点的度:度为0的节点:度不为0的节点一颗树中,最大节点的度称为树的度具有相同父亲的节点称为兄弟节点树中节点的最大层次 一个节点最低层次为1 如果为0的话,空树就为-1,所以推荐一个根节点的最低层次为1从根到该节点所经分支上的所有节点(根节点是所有节点的祖先)二叉树(它的子节点可以理解为计划生育)二叉树不存在度大于2的节点每一层都是满的假如有h层 ,前h-1层都是满的,最后一层要求从左到右是连续的。

2025-02-06 20:41:56 427 10

原创 新手关于学习c语言队列与栈有感

假设我们是我们有5个数据都是以上图的形式储存在栈与队列中,那么,先出的是栈顶的元素即5;,先出的栈底的元素即1。了解完这些我们就可以来了解栈与队列的代码构成。

2025-01-03 15:27:21 596 8

原创 编译和链接

在ANSI C的任何一种实现中,存在两个不同的环境第一种是翻译环境,在这个环境源代码被替换为可执行的机器指令(二进制指令)第一种是翻译环境,它用于实际执行代码。

2024-09-28 10:53:04 320 3

原创 新手关于学习C语言文件和文件操作的有感

1.文件的打开和关闭 fopen fclose2. 流和标准流 :流就是不同设备上的数据内容3.操作过程 :打开流 读取流 关闭流4.文件指针 FILE*的文件指针5.其中r是read的缩写。其中w是write的缩写6."r"错误运行会报错 "w"报错会新建文件夹 如果成功的话会清空文件再添加内容7."wb" "rb"就是 读写二进制得内容8.free(地址名),就是释放内存,防止内存泄漏。

2024-09-22 08:37:40 694 3

原创 新手对结构体内存对齐有感

我们可以把结构体想象一个学生,其中关于学生的名字 年龄 . 名字 . 新别等等就是结构体成员。

2024-09-15 21:24:40 447 4

原创 整型/浮点型数据在内存中的存储

当E的2进制代码位全1时,则表示该数位+无穷或者-无穷,你想想E代表为2的负E次方,如果此时二进制代码内容为全0,说明在32位下时为128,在64位下时为1024,如此大的负次方乘以任何数会变得非常大,所以为+无穷或者-无穷;当E的2进制代码位全0时,则表示该数位+0或者-0,你想想E代表为2的负E次方,如果此时二进制代码内容为全0,说明在32位下时-127,在64位下时-1023,如此大的负次方乘以任何数会变得非常小,所以为+0或者-0;10进制位下的5.5 它的S=1,M=1.011,E=2。

2024-09-09 22:33:45 432 4

原创 模拟实现strlen strcpy strcat strcmp strncpy strncat strstr memcpy memmove

3.strlen类型3。

2024-09-08 21:22:46 269 3

原创 c语言指针及额外知识总结

例如 const int const * const p,被const 修饰的指针变量就是常变量,简单的讲,讲const 放在*左边就会限制*p ,就是说*p的内容不可以修改,而如果在*的右边,就会限制p,我们知道,p是地址,所以p的地址不能被修改,p是指针变量,这个变量是用来存放指针(地址)的,int * 是指针的类型, p是指针的名字,*p就是地址存放的内容:p就是地址,*是解引用,*p是把这个地址的内容读取出来。qsort是c语言中的一个库函数,这个函数是对数据排序,对任意类型的数据都能排序。

2024-09-05 17:24:33 884 6

原创 关于利用二维数组之前的只是建立简易扫雷代码的实践与心得

一 为了简化代码,我们会建立起两个.c文件,以及一个自定义的库函数二首先我们的目标是建立起一个9*9的表格,但是为了避免计算边界越界的问题,我们要通过建立11*11的表格来避免越界问题。

2024-04-27 15:12:26 693 7

原创 新手学习c语言

自己是跟着比特鹏哥在小破站上一步一步走来的,现在大一但深知自己应该提前学习哈,也希望自己能成为一个有实力的大佬。

2024-02-24 17:17:53 390 4

空空如也

空空如也

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

TA关注的人

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