自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++11

很像,编译后从汇编指令层的角度看,压根就没有 Lambda和范围for这样的东西。

2025-01-23 20:48:41 805

原创 红黑树的介绍

p变成课这颗树新的根,这样⼦树黑色结点的数量不变,没有连续的红色结点了,且不需要往上更新,因为p的父亲是黑色还是红色或者空都不违反规则。这⾥获取最长路径和最短路径,检查最长路径不超过最短路径的2倍是不可⾏的,因为就算满足这个条件,红黑树也可能颜色不满足规则,当前暂时没出问题,后续继续插⼊还是会出问题的。c变成课这颗树新的根,这样⼦树黑色结点的数量不变,没有连续的红色结点了,且不需要往上更新,因为c的⽗亲是黑色还是红色或者空都不违反规则。如果p是g的左,c是p的右,那么先以p为旋转点进行。

2024-12-23 00:29:53 643

原创 AVL树的实现

因为5 < b子树的值 < 10,将b变成10的左子树,10变成5的右子树,5变成这棵树新的根,符合搜索树的规则,控制了平衡,同时这棵的高度恢复到了插⼊之前的h+2,符合旋转原则。,不断向上更新平衡因子,导致10的平衡因⼦从1变成2,10为根的树左右⾼度差超过1,违反平衡规则。1,当subLR原始平衡因子时-1时,左右双旋后parent,subL,subLR的平衡因子分别更新为1,0,0。2,当subLR原始平衡因子时1时,左右双旋后parent,subL,subLR的平衡因子分别更新为0,-1,0。

2024-12-19 20:54:28 659

原创 【C++】set和map的使用

1.T是set底层关键字的类型。2.set默认要求T⽀持⼩于⽐较,如果不⽀持或者想按⾃⼰的需求⾛可以⾃⾏实现仿函数传给第⼆个模版参数。3.⼀般情况下,我们都不需要传后两个模版参数。4.set底层是用红黑树实现,增删查效率是logNlogNlogN,迭代器遍历是走的搜索树的中序,所以是有序的。Key就是map底层关键字的类型,T是map底层value的类型,set默认要求Key⽀持小于比较,如果不⽀持或者需要的话可以自行实现仿函数传给第⼆个模版参数,map。

2024-12-17 12:47:34 617

原创 【C++】多态的介绍

多态还有两个必须重要条件:1.必须指针或者引用调用虚函数2.被调用的函数必须是虚函数。运行时多态的构成条件(虚函数实现)(1)存在继承关系:必须有基类和派生类的层次结构,派生类继承自基类。(2)虚函数声明:在基类中,将希望在派生类中重新定义的函数声明为虚函数,使用关键字virtual。例如,。(3)函数重定义:派生类对基类中的虚函数进行重新定义,函数签名(函数名、参数列表、返回值类型要和基类虚函数一致)必须相同,函数体可以不同。

2024-12-15 14:28:15 973

原创 【C++】继承的介绍

在C++中,继承是面向对象编程的一个重要特性。从概念上讲,继承允许你创建一个新类(派生类/子类),这个新类从一个已存在的类(基类/父类)那里获取成员变量和成员函数。继承的主要目的是代码重用和建立类之间的层次结构public:// 进校园/图书馆/实验室刷二维码进行身份认证// ...// 学习// ...protected:// 姓名// 地址// 电话// 年龄int _stuid;

2024-12-11 20:19:56 1209

原创 二叉搜索树

在寻找中序后继(或前驱)并替换要删除节点的值后,错误地对原要删除的节点进行了第二次删除操作,而不是对中序后继(或前驱)节点进行删除。例如,在删除一个有左子节点的节点时,只是简单地删除了该节点,而没有让其父节点指向它的左子节点。:在处理要删除的节点有两个子节点的情况时,没有正确地找到中序后继。比如,没有正确地遍历右子树去寻找最小值的节点,可能会选择一个错误的值来替换要删除的节点的值。后续的搜索、插入等操作可能会出现错误的结果,因为树不再满足左子树的值小于根节点,右子树的值大于根节点的规则。

2024-12-11 14:25:05 733

原创 【C++】vector的用法,一些接口的模拟实现

vector是表示大小可以改变的数组的序列容器。它就像是一个动态大小的数组,可以储存同一类型的多个元素,和普通数组相比,vector的大小的自动调整。vector在实际中非常的重要,在实际中我们熟悉常见的接口就可以。下面列出的接口是要重点掌握的。我们来模拟实现一下以上的函数。

2024-11-28 17:57:41 792

原创 【C++】string的模拟实现

当我们运行程序时,程序崩了,这是因为_str无参构造时,初始化的时nullptr,转为字符串打印时会直接去解引用,然后按照字符串去打印,遇到\0才会终止,这里对空指针进行解引用,导致程序崩溃。比如在 string 类的 find 函数中,当没有找到要查找的子串时,就会返回 npos。这些都是频繁调用或者是比较简单的函数,所以我们定义在类里。这里可以用运算符的复用会比较简单,只需要实现两个,其他的就都可以实现。string本质上是是一种char类型的顺序表,结构上和顺序表相似。,迭代器并不是指针。

2024-11-24 20:40:03 375

原创 C/C++内存管理

(1)如果申请的是内置类型的空间,new和malloc,delete和free基本类似,不同的地方是:new/delete申请和释放的是单个元素的空间,new[]和delete[]申请的是连续空间,而且new在申。它的作用域仅限于定义它的文件,和全局变量类似,在程序运行开始就分配内存,到程序结束才释放内存,只不过访问范围更受限。注意:申请和释放单个元素的空间,使用new和delete操作符,申请和释放连续的空间,使用new[ ]和delete[ ]。2.在申请的空间上执行构造函数,完成对象的构造。

2024-11-12 17:35:51 1237

原创 malloc calloc和realloc区别和联系

malloc是一个⼀个动态内存开辟的函数:它的函数原型是这个函数向内存申请⼀块连续可⽤的空间,并返回指向这块空间的指针。1.如果开辟成功,则返回⼀个指向开辟好空间的指针。2.如果如果开辟失败,则返回⼀个 NULL 指针,因此malloc的返回值⼀定要做检查。运行结果如图3.返回值的类型是void*,所以malloc函数并不知道开辟空间的类型,具体在使⽤的时候使⽤者自己来决定。

2024-11-12 17:06:20 823

原创 【C++】初始化列表,友元函数和static成员

3.友元类中的成员函数都可以是另⼀个类的友元函数,可以访问另⼀个类中的私有和保护成员。4.友元类的关系是单向的,不具有交换性,⽐如A类是B类的友元,但是B类不是A类的友元。

2024-11-11 22:53:15 723

原创 【C++】类的默认成员函数

fill:#333;color:#333;color:#333;fill:none;开始初始化和清理拷贝复制取地址重载构造函数主要完成出初始化析构函数主要完成清理工作拷贝构造函数使用同类对象初始化创建对象赋值运算符重载把一个对象赋值给另一个对象。

2024-11-09 22:37:14 1102

原创 C++入门基础

•定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。//命名空间里可以定义变量/函数/类型int Add(int x, int y)//整数相加的函数struct Node//定义一个结构体int val;//其中::叫做域作用限定符•namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以上。

2024-09-12 21:22:43 5346 1

原创 树和二叉树

树和二叉树的基本概念

2024-05-14 23:12:12 751 1

原创 C语言指针(下篇,题目的练习)

注:在x86的环境下,sizeof计算地址的大小为4个字节。以下代码运行结果是什么?

2023-12-28 15:38:45 449 1

原创 C语言指针(中篇)

如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数时,被调⽤的函数就是回调函数。回调函数不是由该函数的实现⽅直接调⽤,⽽是在特定的事件或条件发⽣时由另外的⼀⽅调⽤的,⽤于对该事件或条件进⾏响应。,当sizeof中单独放数组名时,表示的是整个数组的,计算的是整个数组的大小,单位是字节。qort的模拟实现也是按照冒泡排序来进行模拟实现的,也使⽤了回调函数。这是因为,三个都是指向数组的启示地址所以地址都是一样的。,这里表示的是整个数组,取出的是整个数组的地址。

2023-12-24 15:54:47 467 1

原创 C语言——文件操作

磁盘上的⽂件是⽂件。但是在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类的)。2.1 程序⽂件程序⽂件包括源程序⽂件(后缀为.c),⽬标⽂件(windows环境后缀为.obj),可执⾏程序(windows环境后缀为.exe)。2.2 数据⽂件⽂件的内容不⼀定是程序,⽽是程序运⾏时读写的数据,⽐如程序运⾏需要从中读取数据的⽂件,或者输出内容的⽂件。2.3 ⽂件名⼀个⽂件要有⼀个唯⼀的⽂件标识,以便⽤⼾识别和引⽤。

2023-12-14 14:06:18 1540 1

原创 C语言指针(入门版)

在指针类型中有⼀种特殊的类型是 void* 类型的,可以理解为⽆具体类型的指针(或者叫泛型指针),这种类型的指针可以⽤来接受任意类型地址。由上面的代码我们可以知道指针变量的大小和类型⽆关,只要是指针变量,在同⼀个平台下,⼤⼩都是⼀样的,为什么还要有各种各样的指针类型呢?• 注意指针变量的⼤⼩和类型是⽆关的,只要指针类型的变量,在相同的平台下,大小都是相同的。的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指。

2023-12-11 20:33:57 908 1

原创 C语言中“strlen”,“strcpy”,“strcat”,“strcmp”的使⽤和模拟实现

1:strlen统计的是’\0’之前的字符长度,以‘\0’为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前⾯出现的字符个数(不包含 ‘\0’ )。由图知strcpy返回的是一个目的地的地址(也就是第一个参数的地址),参数的两个字符串,第一个参数是要拷贝到的目的地,第二个参数是要被拷贝的字符串的来源。因为arr1中的c的ASCII码值小于arr2中的d,所以返回小于0的值。3: 注意函数的返回值为size_t,是⽆符号的( 易错 )。• ⽬标空间必须有⾜够的⼤,能容纳下源字符串的内容。

2023-12-10 14:02:34 1894 1

原创 C语言中的结构体

C语⾔已经提供了内置类型,如:char、short、int、long、float、double等,但是只有这些内置类型还是不够的,假设我想描述学⽣,描述⼀本书,这时单⼀的内置类型是⾏的。结构的每个成员可以是不同类型的变量,如:标量、数组、指针,甚⾄是其他结构体。上面的代码有两种传参的方式,一种是传参数,一种是传地址。如果传递⼀个结构体对象的时候,结构体过⼤,参数压栈的的系统开销⽐较⼤,所以会导致性能的下降。有时候我们得到的不是⼀个结构体变量,⽽是得到了⼀个指向结构体的指针。其原因是结构体的对齐规则。

2023-12-03 11:42:55 1496 1

原创 C语言整数和浮点数在内存中的存储

这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着⼀个字节,⼀个字节为8bit 位,但是在C语⾔中除了8 bit 的 char 之外,还有16 bit 的 short 型,32 bit 的 long 型(要看。⽐如:0.5 的⼆进制形式为0.1,由于规定正数部分必须为1,即将⼩数点右移1位,则为1.0*2^(-1),其阶码为-1+127(中间值)=126,表⽰为01111110,⽽尾数1.0去掉整数部分为0,补⻬0到23位。那么,S=1,M=1.01,E=2。的,是节省1位有效数字。

2023-11-28 19:25:16 778

原创 C语言的操作符

其实10进制的123表⽰的值是⼀百⼆⼗三,为什么是这个值呢?其实10进制的每⼀位是权重的,10进制的数字从右向左是个位、⼗位、百位…,分别每⼀位的权重是 10的0次方 , 10的1次方 , 10的2次方 …如下图所示由十进制可类推二进制二级制转八进制8进制的数字每⼀位是0。

2023-11-09 16:39:16 44 1

原创 C语言函数的递归

1.递归是一种解决问题的方法,在C语言中,就是函数自己调用自己下面写一个最简单的C语言递归代码int main()main();return 0;运行的结果为无限打印haha递归的思想:把⼀个⼤型复杂问题层层转化为⼀个与原问题相似,但规模较⼩的⼦问题来求解;直到⼦问题不能再被拆分,递归就结束了。所以递归的思考⽅式就是把⼤事化⼩的过程。递归中的递就是递推的意思,归就是回归的意思。

2023-11-06 23:13:09 52

原创 C语言实现扫雷小游戏

首先我们先用do-while循环让这个游戏可以重复游玩,menu()是一个专门用来打印开始菜单的一个函数,game()是我们实现扫雷游戏的一个函数。input是我们输入的值,当我们输入:1,switch语句会让我们开始游戏,输入:0,则结束游戏。我们把雷写作1,非雷的位置写作0。这也写我们发现当我们输入绿色方格的坐标,屏幕打印1,不能反映附近雷的个数,还有第二个问题,我们发现下面的的黄色的方格已经越界了。第一个问题我们可以这样解决:创建两个数组,一个存放雷的信息,一个存放排查出来的雷的信息。

2023-11-01 14:37:38 54 1

原创 C语言数组

C语言数组的知识点以及应用

2023-10-28 17:14:07 55 1

原创 C语言的循环结构

C语言循环语句的一点点知识点

2023-10-24 16:37:35 63

原创 C语言的分支

C语言分支的知识点

2023-10-23 23:48:57 352

原创 初识C语言

使⽤双引号括起来的⼀串字符就被称为字符串,如:"abcdef",就是⼀个字符串。C语⾔字符串中⼀个特殊的知识,就是在字符串的末尾隐藏放着⼀个 \0。C语言是一种编译型计算机语言,C语言的源代码是文本文件,文本文件无法自身执行。必须经过编译器的编译和链接器的链接,生成二进制的可执行文件,可执行文件才能运行。编译器尽量选择vs2022,vs2022的优点有免费,安装简单,功能强大,对初学者友好等等。\0是转义字符,转义字符简单来说就是改变原来意思的字符如\n是换行的意思。C语言的代码是放在.c的文件中的。

2023-10-10 16:14:52 45 1

空空如也

空空如也

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

TA关注的人

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