自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux文件管理

一.文件在Linux下的分类Linux下一切都是文件!!!本文详细介绍了Linux下文件系统的基础概念,结构组成,各目录的功能,常见的文件系统类型(如ext2),挂载机制,inode,软硬链接等关键内容。一.文件在Linux下的分类文件的管理在Linux下被分为了两种(被进程打开的文件,没有被打开的文件),被进程打开的文件他的信息被存放在内存里的文件管理中,没有被打开的文件他的属性和内容都是放在磁盘当中的,因为操作系统为了使用户不接触底层的硬件,将硬件给抽象了一层出来的。

2026-11-05 16:35:40 77

原创 红黑树的实现以及对map和set的封装

在底层我们设计出Iterator来,我们先不管逻辑是怎么样的我们先看使用,在库里面map和set的迭代器是双向的迭代器,所以底层也需要设计出这样的迭代器,因为我们设计的树是通过left,right和parent联系在一起的,所以我们需要包装一下iterator(像之前实现链表的迭代器一样)++如果它有右子树,就让它走右边,去找右边树的最左结点,它的右子树为空了,说明该结点结点走完了,下一个结点是把结点当成左边孩子的结点,如果找到了它就是结点,如果没有找到,说明父亲结点也走完了,让它向上去找。

2026-10-23 17:36:33 65

原创 AVL树的讲解与实现

一.AVL树的概念AVL树是最早发明的平衡二叉树,一颗AVL树要求左右子树都是AVL树他们的高度差最大为1---怎么实现这一操作呢?AVL树最关键的点是引入了平衡因子的概念,规定这个结点的平衡因子的值=右子树的高度-左子树的高度,也就是说该结点的平衡因子有1/0/-1这几个值如果是0的化说明该节点的左右两个结点是平衡的(完全二叉树)AVL树整颗树的结点类似于我们的平衡搜索二叉树因此他的增删查的时间复杂度是O(logN),相比于二叉搜索树,避免了出现像链表一样的结构。

2026-10-19 16:31:10 103

原创 map和set介绍与使用

map的主要是以K-V的存储与set的不同,支持K值的排序和去重,他的要求也是类型要支持比较小于,如果不支持或者需要的化可以自行实现一个比较的虚函数传过去,map底层存储数据的内存是从空间配置器申请的,一般情况下,我们都不需要传后面两个参数,map的底层是红黑树支持K-V的结构。这里的插入(1)返回的是一个pair类型这个类型是库里面一个含有两个类型元素的类型这里支持值插入还支持一段迭代器区间和链表初始化的插入,需要注意的是因为set容器不支持有相同的值所以不会插入容器已经存在的值。他的迭代器也是一个。

2026-10-13 20:15:09 149

原创 二叉搜索树

一.二叉搜索树的概念一.二叉搜索树的概念二叉搜索树又称二叉排序树,它或者是一颗空树,或者是具有以下性质的二叉树1.若他的左子树不为空,则左子树上所有结点的值都小于等于根结点的值2.若它的右子树不为空,则右子树上所有的结点的值都大于等于根结点的值他的左右子树也分别是二叉搜索树。

2026-10-08 17:23:08 161

原创 多态内容的讲解

一.多态的概念一.多态的概念多态的概念:通俗的讲,就是多种形态。多态分为编译时多态(静态多态)和运行时多态(动态多态)。编译时多态(静态多态)主要是我们之前讲的函数重载和函数模板传不同的参数可以调用不同的函数,通过参数不同达到多种形态,之所以叫编译时多态,是因为他们实参传给形参的参数匹配是在编译时完成的,我们把编译时一般归为静态,运行时归为动态运行时多态,具体点就是去完成某个(函数),可以传不同的对象就完成不同的行为,就达到多种形态。

2026-10-04 13:55:18 261

原创 继承与多态

我们看到Person是基类也是父类。Student是派生类,也称作子类这里的继承方式有public,protected,private。不管哪一种继承方式派生类中都继承了基类。继承方式在派生类中只是访问的问题不同的继承方式这个地方有什么不同呢?1.基类的private在派生类中无论什么方式都是不可见,这里的不可见是指基类的私有成员还是被继承在派生类中了,但是在语法上限制了派生类对象不管在类里面还是类外面都不能去访问它。

2026-09-28 13:36:43 233

原创 模板进阶*

优点1.模板增加了代码的可复用性,节省了资源,更快的迭代开发,c++标准库stl因此产生2.增强了代码的灵活性缺点1.模板会导致代码膨胀的问题,也会导致编译时间变长2.出现编译错误时,错误信息凌乱,不易定位错误。

2026-09-26 14:36:21 186

原创 priority_queue的适用和模拟实现

priority_queue这个构造用仿函数的目的啊是为了控制比较如果你想写一个建小堆的如果我们不知道仿函数的时候我们就得要搞两个类出来但是但是我们有仿函数就直接作为这个类的成员我去太方便了说实话直接控制比较的大小(我们比较的时候也用仿函数重载的()去比较)这样我们就能控制参数来控制大小堆了后面也有很多这东西的讲解----还是比较实用的。这个函数呢根堆的向上调整是一样的,我们把数组当成一颗树我们需要传的是child结点的下标--我们看去跟他的parent(下标就是(child-1)/2),去比较一下。

2026-09-26 11:38:48 162

原创 stack和queue

优先级队列默认情况下使用的是vector其作为底层存储的容器,再vector上使用了堆算法将vector中元素构造成堆的结构,因此priority_queue的接口是堆,所以需要用到堆的位置,都可以考虑priority_queue,注意默认情况下priority_queue是大堆。特别说一下这里用迭代器区间构造这个堆---先用类里面的容器把数据拷贝一份(不管是不是堆)然后从后往前调用向上调整算法(保证这一小部分是一个堆)然后在--往前弄(我们的底层是一个数组这里就用的是小标的方式)

2026-09-20 16:23:22 121

原创 list的功能与模拟实现

因为list是这个双向带头链表,他的迭代器失效就是所指向的节点的无效,即该节点被删除了他的迭代器才会失效,在list中进行插入不会导致list的迭代器失效,只有在删除时才会失效,并且删除时失效,也这是被删除的节点失效了,其他位置的迭代器不会失效。在这个地方list的迭代器如果当成一个指针的化那么指针++是否满足他走到下一个位置呢,这个显然是不可以的因此list的迭代器其实是一个类需要重载这些运算符。这个地方的迭代器实现也是用的has-a的方法就是类中包含其他类的对象(也可以使用继承的方法)

2026-09-19 10:26:16 155

原创 vector介绍及模拟实现

这里画一个图理解如果用memcpy这里只是一个浅拷贝tmp里面string类和原来的string类里面的_str都指向同一片空间析构tmp的时候会调用string的析构函数会把这个共用的字符串给消灭掉,在这里用[]其实是对已经规格好的类使用vector的规范这里[]会调用string的赋值重载看这里vector走的这个[]是一个有一个的string然后让string赋值重载然后就实现了深拷贝。迭代器失效的问题我们待会实现的时候再说。这个返回的其实是相当于是删除前的下一个位置的迭代器了这个要注意。

2026-09-11 20:25:35 168

原创 string类的实现

一.认识string类一.认识string类在c++中封装了很多的类,比如说string类,vector类等等,c++涉及这个string类是为了方便使用避免了想c语言中字符串的一些问题,在c语言中字符串相关的函数和类型的定义是分开的不太符合c++面向对象这一风格,设计string类就很好帮助我们。使用的时候也不用管理底层的空间,也很少会越界访问。我们先来学习标准库里定义的string类有那些成员,在使用string类的时候他是被定义在库函数中要想使用闭俗写他的头文件string,并且要把命名域打开。

2026-09-08 09:59:53 153

原创 模板初阶*

我们有函数重载那对于不同类型的交换函数我们在使用的时候会很方便,但是在写这些函数重载时代码的复用性并不好所以因此c++引入了模板这个概念1.重载函数仅仅是类型不同,代码的复用率不高,只要有新的类型就要写一个新的函数。2.代码可维护性很差,一个出错可能导致全部函数重载出错C++提供一个模板可以使这些问题得到改善。

2026-08-31 20:24:51 143

原创 C++内存管理

在c++在内存分布上有这么几个区域,1.堆 2.栈 3.数据段 4.代码段这些都是我们比较熟悉的,还有像内核空间和内存映射段我们先不考虑。栈呢又叫堆栈-非静态的局部变量/函数参数/返回值都存储在这里,栈是向下增长的,逐渐向内存低的地方扩展堆用于程序动态分配,堆是向上增长的。数据段用来存放全局变量和静态数据,静态变量有分静态全局,静态就局部 全局的局部的声明周期长,堆无法静态分配只能动态分配。代码段放可执行的代码/只读常量32位的系统下,最大的访问内存空间是4G。

2026-08-31 18:49:06 199

原创 类与对象(三)

一.初始化列表一.初始化列表我们之前讲的构造函数,拷贝构造函数进行初始化对象,为对象分配内存空间,出了这两种方式还有一种方式就是初始化列表。他的使用方式是以一个冒号开始,接着是一个以逗号分隔数据成员列表,每个成员变量后面都跟一个放在括号里的表达式或者初始化的值。每个成员变量在初始化列表中只能初始化一次,语法理解上初始化列表可以认为是每个变量定义初始化的地方。

2026-08-30 13:39:14 149

原创 类与对象(二)

6.像Date这样的类成员变量全是内置类型并且没有指向什么资源,编译器自动生成的拷贝构造就能够实现我们目的,所以不需要显示实现拷贝构造,像Stack这样的类,虽然也都是内置类型,但是_a指向了资源,赋值给另一个变量的时候他们的_a对会指向同一片资源,因此我们需要显示的完成拷贝构造函数。第二个参数可以就是类类型的对象。7.传值返回会产生一个临时对象调用拷贝构造,传值引用返回,返回的是返回对象的引用,没有产生拷贝,但是如果返回对象是一个当前函数的局部变量,函数结束就销毁了,那么使用引用拷贝返回就是有问题的。

2026-08-24 09:49:57 216

原创 类与对象(一)

我们看,在这个main函数里我们定义了一个A指针的变量p让他的值给到nullptr,然后呢,p->Print这里会调用类中的函数,类中的第一个参数是this指针就是对象的地址那么p就是对象的地址nullptr,所以这里到函数体内this=nullptr的如果在函数里没有用这个空指针,编译还是没问题的,但是我们使用了这个指针访问对象的成员函数_a这里解引用了空指针,编译会报错。类体中的的内容是类的成员,类中的变量称为属性或者成员变量,类中的函数称为类的方法或成员函数,这个问题是用我们的this指针来实现的。

2026-08-23 14:07:02 176

原创 初始C++(二)

本文摘要:C++函数重载允许同一作用域中出现同名函数,通过参数类型、个数或顺序不同实现多态。引用是变量的别名,与指针功能相似但语法更简洁,需注意const引用和临时变量问题。内联函数(inline)可提高效率替代宏函数。C++引入nullptr解决NULL在重载中的歧义问题,明确表示空指针。这些特性体现了C++对C语言的扩展,提供了更灵活和安全的编程方式。(150字)

2026-08-21 09:02:50 156

原创 初始C++(一)

一.初始C++一.初始C++C++的历史C++的起源可以追溯到1979年,当时Bjarne Stroustrup(本贾尼·斯特劳斯特卢普,这个翻译的名字不同的地⽅可能有差异)在贝尔实验室从事计算机科学和软件⼯程的研究⼯作。⾯对项⽬中复杂的软件开发任务,特别是模拟和操作系统的开发⼯作,他感受到了现有语⾔(如C语⾔)在表达能⼒、可维护性和可扩展性⽅⾯的不⾜。

2026-08-14 21:29:22 177 1

原创 顺序表及通讯录的实现

数据结构:计算机存储,组织数据的方式。顺序表是线性表的一种线性表具有相同的数据结构的集合线性表物理结构:不一定连续逻辑结构:连续的顺序表的特性:物理结构,逻辑结构都是连续的顺序表底层就是数组,但是顺序表中提供了增删查改,就变成了顺序表。

2025-10-10 11:56:47 411

原创 文件与文件操作

从文本文件上读取num-1个字符存入到字符数组str中 num-1是因为最后一个默认是'\0'该函数只能读取第一行的字符不能换行读取 成功会返回数组的首元素地址 如是读取到文件末尾或者读取失败则会返回NULL字符。我们抽象出了流的概念。两者在存储字符是都是存取的其ASCII码值---但两者的差别是在数值的存储上 二进制文件存储的是其值相等的二进制数 而文本文件则是将该数值看成字符。数据文件的文件内容不一定是程序,而是启动程序运行时读写的数据,比如程序运行时需要从中读取数据的文件或者输出内容的文件。

2025-09-09 17:07:38 1336

原创 自定义类型

结构体的定义下面我们简单定义一个学生的基本信息表struct Stuint age;//这里定义了一个结构体的类型名字是struct Stuint main()//这里定义了一个s1的结构体变量 他的数据类型就是struct Stu。并完成了初始化上述我们定义了一个结构体变量,并完成了初始化。通过这个,了解了结构体的初始化需要{}。对于访问结构体成员的时候我们就需要运用到几个操作法这个操作符是对于操作符变量的例我们就可以就把s1的年龄改成了18.->

2025-08-18 16:30:22 1344

原创 浮点数在内存中的存储

是一个非常小的数字这个时候把E看成1-127 在取M时也不会在前面加上1 这时值相当于+-0;double,最高一位表示符号位,接着11位存储E,剩下的52位存储有效数字M。浮点数的存储是按照IEEE754标准,存储了S、M、E相关的值,有的浮点数是不能精确保存的。其中M的取值总是1<=M<2所以在存储时只存M的小数部分,读取时在给他补上。float,最高一位表示符号位S,紧接着8位存储E,剩下32位存储有效数字M。V=(-1)^S*M*2^E S为符号位 M为实际的数字,E为指数的部分。

2025-08-13 19:44:45 244 2

原创 指针与数组

这表明ppa是一个数据类型为int**的指针变量他所指向的数据的数据类型是int* 数组名为 pa 同时这个pa 是个整形指针,数据类型为int*这里的运算关系是首先p与[5]结合可看成整体是一个数组把其p[5]去掉后为int()(int,int)是一个函数所以他是一个函数指针数组。这就相当定义了一类数组,数组存放的是一类int*的数组,每一个数组元素都是指针变量。我们这样定义一个字符数组也是可以的,p是字符串首元素的地址。本质是数组 存放的是相同类型的数据。本质是一种指针变量是存储的是数组的地址。

2025-08-11 14:19:25 283

原创 指针的讲解

指针是我们学习C语言的一个基础。下面将详细讲解指针其实应用。

2025-08-09 10:24:30 451

原创 qsort函数的使用及改造Bubble_sort

qsort函数是一个排序的函数,它的特点是可以排序任意类型的数组。下面我来讲解并且说明以下这个函数qsort 函数 它是在stdlib.h这个头文件中的一个方便排序的函数这个函数我们想要使用的话我们需要关注这四个参数。

2025-07-13 14:49:45 529

原创 扫雷游戏简易程序

扫雷游戏是window配备的一款休闲游戏他的玩法是鼠标随便在9*9的放个中点击一个想要验证的格子,如果周围有雷,它会显示周围坐标雷的数目。并且可以用鼠标右键进行对已确定是雷的位置进行确认直至排除所有的雷的数目。

2025-05-23 13:02:50 1650

空空如也

空空如也

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

TA关注的人

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