- 博客(25)
- 收藏
- 关注
原创 从零开始的C++之旅——红黑树封装map_set
map和set的封装可以算是目前最难的知识点了,在实现的过程中,我也遭遇了许多困境,其中涉及了众多的知识点,我将其罗列出来并进行总结。
2024-12-25 21:53:58
1692
41
原创 从零开始的C++之旅——红黑树及其实现
5.不管是哪种操作,只要出现连续的红色节点(插入节点及其父亲节点为黑色),那么我们的总体思想就是将父亲节点变为黑色,因为只有这样才能保证其遵从红黑树的规则,在此基础上,由于我们将一个红色节点变为了黑色,破坏了规则4,那么接下来我们的思想,便是通过一系列的操作,使得每条路径上的黑色节点数量回复一致。根据插入思想,p是一定要变黑色的,那么p变黑之后路径上多出了一给黑色节点,怎么办呢?若c为红,p为红,g为黑,u不存在或存在且为黑,则需要进行旋转,并且c为p的右节点,但p是g的左节点,则进行的是双旋+变色。
2024-12-23 20:51:45
1453
30
原创 我是贝尔格里尔斯,我要向你展示如何入门并熟练掌握世界上最难的操作系统之一linux,这里遍布着数不清的指令,以及完全脱离图形化的界面,没有高超的学习技巧,甚至连一秒都坚持不下去--进程概念(上)
冯诺依曼体系结构是由匈牙利数学家约翰·冯·诺依曼提出的一种计算机设计模型。它描述了一种计算机的基本组成部分及其工作原理。我们目前所认识的大多计算机,都是由一个一个硬件构成的。并且这些计算机,大多都遵从冯诺依曼体系。
2024-12-09 19:13:40
1081
2
原创 从零开始的c++之旅——AVL树及其实现
旋转核⼼步骤,因为5<b⼦树的值<10,将b变成10的左⼦树,10变成5的右⼦树,5变成这棵树新 的根,符合搜索树的规则,控制了平衡,同时这棵的⾼度恢复到了插⼊之前的h+2,符合旋转原 则。(类似我们之前说的map容器)这里我们可以得知,插入节点的位置回导致subLR这颗子树的平衡因此的变化,上述三种情况会导致插入后subLR的平衡因子各不相同,因此我们在双旋之前记录下其平衡因子,在旋转之后通过对其平衡因子的判断从而得知平衡因子的更新路径。需要明确的是,插入前的这颗AVL树是一个完整的符合规则的AVL树。
2024-12-08 17:09:15
1394
42
原创 我是贝尔格里尔斯,我要向你展示如何入门并熟练掌握世界上最难的操作系统之一linux,这里遍布着数不清的指令,以及完全脱离图形化的界面,没有高超的学习技巧,甚至连一秒都坚持不下去--基础开发
如上就是我们在开发过程中所用到的开发工具,我们学习了yum的软件包安装,了解了vim编辑器的运用,掌握了makefiel自动化构建的运用,以及了解git三板斧和cgdb的调试器。博客知识一种对知识点的总结和归纳,我们需要需要在日常中不断的使用,才能熟练的掌握这些开发用的使用及其技巧。
2024-11-30 18:09:49
1624
45
原创 从零开始的c++之旅——map_set的使用
map底层节点中插入的数据,是使用 pair 键值对来存储数据的。T1 first;T2 second;{}{}{}我们使用map的最爽的插入方式就是走隐式类型转换int main()
2024-11-20 20:22:15
1680
12
原创 我是贝尔格里尔斯,我要向你展示如何入门并熟练掌握世界上最难的操作系统之一linux,这里遍布着数不清的指令,以及完全脱离图形化的界面,没有高超的学习技巧,甚至连一秒都坚持不下去--linux文件权限
• 目录的可执行权限(-x)表示你是否可以在目录下执行命令。• 如果目录没有 -x 权限,用户无法对目录执行任何命令,甚至无法使用 cd 命令进入该目录。即使目录有 -r 读权限(这是一个常见的误解,认为有读权限就可以进入目录并读取文件,但实际上没有可执行权限是无法进入目录的)• 如果目录具有 -x 权限,但没有 -r 读权限,用户可以执行命令,可以使用 cd 命令进入目录。但由于没有目录的读权限,用户在目录下即使可以执行 ls 命令,也无法读出目录下的文档。
2024-11-18 14:33:38
941
12
原创 我是贝尔格里尔斯,我要向你展示如何入门并熟练掌握世界上最难的操作系统之一linux,这里遍布着数不清的指令,以及完全脱离图形化的界面,没有高超的学习技巧,甚至连一秒都坚持不下去——linux基础指令
语法:ls [选项] [⽬录或⽂件]功能: 对于⽬录,该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件,将列出⽂件名以及其他信息。ls常用选项1) -a 列出所有目录,包括以 “ . ” 开头的隐藏文件2)-l 列出文件的详细信息(ls -l 可以简写成 ll)
2024-11-17 16:56:47
1085
40
原创 从零开始的c++之旅——二叉搜索树
这与之前实现的二叉树类似,只不过用上了模板跟构造函数,因为构造函数我们在后面需要用来生成节点。K _key;:_key(key){}//这里也能体现封装思想,不管我们如何实现的类此处我们只需定义成Node即可private://头节点。
2024-11-16 19:27:38
975
11
原创 从零开始的c++之旅——多态
多态就是一个继承关系的下的类对象,去调⽤同⼀函数,产⽣了不同的⾏为。⽐如Student继承了 Person。Person对象买票全价,Student对象优惠买票。
2024-11-06 18:12:42
1770
14
原创 从零开始的c++之旅——继承
如下图所示,Person是基类,也称作⽗类。Student是派⽣类,也称作⼦类。不写,编译器默认生成的行为是什么?默认生成不符合我们需求,自己写,得怎么写?特点:子类中继承下来的父类成员当做一个整体对象构造:默认:子类成员 内置类型(有缺省值就用,没有不确定)和自定义类型(默认构造) + 父类成员(必须调用父类默认构造)拷贝构造:子类成员 内置类型(值拷贝)和自定义类型(这个类型拷贝构造) + 父类成员(必须调用父类拷贝构造)赋值重载:类似拷贝构造。
2024-11-03 11:49:13
2046
13
原创 从零开始的C++之旅——string类的模拟实现
string类型的成员变量其实跟我们之前数据结构定义的顺序表十分相似,同时一些操作的实现也与顺序表类似,因此实现方式也基本类似,无非就是多了类和对象的相关只是,在实现string类的过程中也可以帮助我们对c++的一些相关知识有更好的掌握既然和顺序表类似类似,那么其自然是三个成员变量,一个是大小size,一个是存储空间大小capacity,一个是char*类型的指针。
2024-11-01 16:16:13
1352
20
原创 从零开始的c++之旅——C++ 类和对象(下)
其中需要注意的点是,A& 对象的隐式类型转换,是先产生一个临时对象,再用这个临时对象拷贝构造A& 的对象,由于临时对象具有常性,使用const A& 到 A&的过程中涉及权限的放大,因此要加上const修饰,即。• 引⽤成员变量,const成员变量,没有默认构造的类类型变量,必须放在初始化列表位置进。4. 静态成员函数中可以访问其他的静态成员,但是不能访问⾮静态的,因为没有this针。3.⽤static修饰的成员函数,称之为静态成员函数,静态成员函数没有this指针。
2024-10-31 11:06:37
1172
7
原创 从零开始的c++之旅——C++类和对象(中)
在第2点提到,拷贝函数的第一个参数必须是类类型对象的引用,否则会报错,因为形成了无线递归,结合第三点,如果是自定义类型对象在传值调用时会调用拷贝构造,但是如果我们的拷贝构造是传值调用的话,拷贝构造的参数又要调用拷贝构造,这就形成了俄罗斯套娃,无限循环以下是示例图。在MyQueue类里面,我们的成员变量为两个自定义类型,这就意味着在我们不需要再在pubilc中定义这个类的初始化函数,在MyQueue对象的实例化时会自动调用自定义类型的构造函数,省时省力。
2024-08-11 13:29:12
1117
6
原创 从零开始的c++之旅——C++ 类和对象(上)
• class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。• 为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_ 或者 m开头,注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求。
2024-08-10 11:47:21
1021
8
原创 从零开始的c++之旅——入门基础(下)
int& rd = d也是类似,在类型转换中会产⽣临时对象存储中间值,也就是说,rb和rd引⽤的都是临时对象,在类型转换的传参时,是先将d的整数部分传给临时变量,再将临时变量的值传给我们要赋值的对象的。我们发现rb++会产生报错,因为rb这个引用变量是被const修饰的,因此他的权限小不能改变自生的值,然而我们b变量并没有被const修饰,因此我们可以进行b++的操作,又因为rb为b的引用变量,因此rb的值也因此改变。可以看到引用变量的地址都是一样的,并且改变了引用对象的值就改变了被引用对象的值。
2024-08-05 13:17:10
1412
3
原创 从零开始的c++之旅——入门基础(上)
谈namespace之前我们先提及域的概念在c++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/类型 出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。namespace的作用就是让定义一块命名空间域,这个域跟全局域是相互独立的,因此不同的域可以定义相同的变量相当于小明和小红是两个不同的人,但是他们可以用同一个型号的手机,手机的型号虽然是一样的,但是拥有者不同。
2024-08-03 15:48:19
1037
5
原创 常用快捷键集合
编译.编译程序:Ctrl + F7运行.运行程序:Ctrl + F5打断点:F9启动调试并运行到断点位置:F5单步执行:F10单步进入函数:F11结束调试:Shift +F5清除项目中的所有断点 CTRL + SHIFT + F9跳出执行当前执行点所处函数的剩余行 SHIFT + F11。
2024-08-02 12:48:03
404
1
原创 数据结构-二叉树(链式结构)
误区:实现这个功能我们依然是使用递归来实现,但是以下为几个比较容易踩坑的点:1.在函数内部定义变量size,每此递归时都加1而众所周知的,形参是实参的一份临时拷贝,我们函数的调用为值的调用因此每次递归之后不会改变size的值2.定义全局变量size,并在函数内部使用指针来接受地址虽然这样可以做到改变size的值,但是一旦我们二次使用该函数时,由于size的值在二次调用之前就已近发生了改变,所以这种方法也行不通。那么我们应该使用什么方法来实现这个函数呢?答案是返回值。
2024-07-29 20:47:08
1468
8
原创 数据结构-二叉树(顺序结构)
同上所述,堆的实现使用的是二叉树的顺序存储结构,其底层依然是数组,所以与顺序表的定义大致类似。因此不过多赘述。int size;}HP;
2024-07-26 08:45:28
1081
5
原创 数据结构-栈
栈是一种“后进先出”的数据结构。栈可以看做是一种特殊的线性表,只能在栈顶进行插入和删除操作。只有栈顶是允许操作的,而栈底是固定的。在生活中,栈的结构其实很常见,例如手枪的弹夹,每次只能在顶部进行取子弹和装子弹,又例如浏览器的前进与后退,都是操作的我们最后一个打开的网页压栈:栈的插⼊操作叫做压栈/⼊栈,⼊数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。
2024-07-21 12:14:34
855
17
原创 数据结构-单链表
在顺序表的实现中,我们可以发现,顺序表结构存在一定的不足1.头插/指定位置插入 的复杂度为O(n)2.增容需要申请新的空间,我们一般采用二倍增容的方式,但这不可避免的会造成空间浪费3.在每次的realloc增容时,都会需要一定时间消耗,降低程序运行效率那么有没有一种的数据结构,可以解决上述问题呢?由此,链表结构应运而生。
2024-07-13 16:56:17
978
3
原创 数据结构-顺序表
所谓的米其林餐厅,其实就是苍蝇馆子豪华版,同样的所谓顺序表可以理解为数组promax,数组能做的事情他都可以做到,并且顺序表拥有着米其林餐馆的“高端定制服务”——你可以自己增加你想实现的操作。静态顺序表在空间上的使用是静态的,但是在如今的大数据时代,信息不停变化的,那么我们如果想要实现动态的申请空间大小不断扩容,就需要实现动态顺序表。在动态顺序表的实现过程中,经常需要对实现的操作进行调试,因此首先实现顺序的打印可以帮助我们更加方便的观察程序是否出错。物理结构是连续的(顺序表的底层是数组)
2024-07-10 20:38:17
1558
6
原创 以梦为马,不负韶华
大家好,作为一个编程小白,虽然先前在高中曾学过2年的python编程,但面对c语言这门新的编程语言,我还未曾涉及过,我希望在接下去的日子里,通过我的博客,与大家分享我的编程经验,并与大家一同进步。
2024-02-04 17:44:22
454
6
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人