自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++之AVL树

在上一节中,我们学习了什么是二叉搜索树,以及它的功能和结构特点。但是有一些极端情况(单叉树)会导致其查找效率大大降低,于是前人们在那个的基础上再次进行了一些约束,于是就出现了AVL树。这节我们学习的AVL就是我们之前所学习的二叉搜索树的一个进阶版,我们加上了平衡因子这一限制条件,使得二叉搜索树的查找效率得到了本质上的提升。而对于平衡的调整,主要在旋转这一操作上。对于旋转,就从我个人学习后一些经验总结:对于左单旋是在一棵二叉树是一个单纯的右边高的情况;而对于右单旋是在一棵二叉树是一个单纯的左边高的情况。

2025-04-29 20:09:52 456

原创 C++之set与map

在之前我们学习了一些常见的STL,我们学习完之后,可以清楚地感受到STL是十分好用的,现在我们再来学习两个STL——set和map。现在我们已经了解了map和set的一些基本的函数用法,我们回过头来看,它们都是对于数据的处理,但是比我们之前所学习的那些STL感觉更加智能化,我们只有将数据传入进去,它们就会帮我排好序(这还是依赖于它们的底层实现结构),还有着去重的特性。掌握好这些,我们后面对于OJ题会事半功倍。

2025-04-21 10:43:47 961 1

原创 C++之二叉搜索树

在本节中,我们来介绍数据结构中一种特殊的二叉树——搜索二叉树。BST的key-only和key-value版本分别适用于不同的场景。选择时需根据具体需求,权衡功能和性能。key-only适合简单的集合操作,而key-value适合需要存储和检索关联值的场景。

2025-04-14 22:29:01 657

原创 C++之多态

在上一节中,我们学习了C++中面向对象的三大特性之一的继承,我们通过继承更加灵活地使用代码,我们可以不用再重复写那些冗余的代码,对于一些成员相同或类似的类,我们可以通过继承来生成一个派生类。在这节,我们再来学习C++面向对象中三大特性的多态。多态(Polymorphism)指的是同一个函数或方法在不同的情况下表现出不同的行为。编译时多态(静态多态):包括函数重载和运算符重载,编译器在编译阶段就确定调用哪个函数。运行时多态(动态多态):通过虚函数和动态绑定实现,编译器在运行时根据实际对象类型调用相应的函数。

2025-04-10 14:56:50 730 5

原创 C++之继承

我们可以看到下面的图片中:Student是派生类,它是继承自基类Person,在两个类中间还有一个继承方式。(由于翻译的不同,基类也叫做父类,派生类也叫做子类)如下代码是一个简单的继承,我们将那些派生类所共有的属性/方法都放到了基类中去了,然后我们将派生类从基类中进行继承,然后再在派生类中增加一些属性/方法。从监视窗口,我们可以看出来派生类实例化出来的对象是具有基类的所有属性的。

2025-04-08 16:23:11 747 4

原创 C++之模板二番战

我们在刚开始学习C++不久就接触到了模板,刚开始我们为了后面进度的推进,仅仅是学习了一些皮毛,经过STL的各种容器的学习,我们逐渐熟悉了模板,在这节我们将要对模板进一步学习。【优点】1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性【缺陷】1. 模板会导致代码膨胀问题,也会导致编译时间变长(我们对于一些特例化模板操作,可能会出现一些代码重复出现的情况);2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误。

2025-03-21 16:43:47 589 2

原创 C++之stack/queue

我们在这节再来学习中STL中几个已经写好的“成品”,但是它们并不是我们之前所说的容器,这节我们将要介绍的是容器适配器。容器适配器(Container Adapter)是一种设计模式或编程技术,用于提供对容器(例如:数据结构)进行封装的接口,适配不同类型的容器,使其在不同的应用中具有通用性。容器适配器通常用于将一种容器的数据结构调整成符合特定操作需求的形式,同时屏蔽底层容器的细节。主要特点封装容器:容器适配器通过封装底层容器,允许用户以一种标准化的方式访问数据,而无需关注容器的实现细节。

2025-03-18 09:54:21 586

原创 C++之list类(超详细)

我们在vector中就已经介绍了C++中引入了STL的方便,这里我们就不多赘述了。我们上节所学习的vector,这个容器使用于那个存储空间连续的结构,因为它的底层设计是数组实现的。对于那些存储空间不连续的结构,如我们在数据结构中所学习的链表,它是有一个一个的指针连接起来的,这里我们就来学习一下这种容器——list。上面这个介绍是引入C++文档指导的,我们从上面的文档中,我们可以知道list就是一个允许在任意位置进行插入/删除的序列容器,它同样可以使用迭代器,因此我们可以通过迭代器轻松遍历list中的内容。

2025-03-15 20:46:37 893 2

原创 C++之vector类(超详细)

我们在上一节中学习了string类,我们通过这个类可以实现各种各样的操作。然而string类是专门设计来用来处理字符类型的,它是用来对字符的高级处理以及内存优化,适用于文本数据。但是在本节中我们将要的vector,是一个通用的容器类,它可以存储任意类型的数据,适用于处理任意类型的集合。同样地,vector有着属于自己的构造函数,vector要存储数据,因此它肯定是要进行资源的申请的。它的构造函数同样很多,主要的就是我们上面所展示的哪几种。

2025-03-09 15:51:58 2453

原创 C++之string类的模拟实现(超详细)

我们在上一节内容中,已经详细介绍了string类,这个可以是我们对目前学习的C++的一个很好的总结,以及与前面所学习的C语言很好地联系在一起了,这节我们来尝试一下如何去自己模拟实现一些string类,以及它那些丰富的接口函数。这节我将以源代码以及注解的方式来向大家来介绍string类的模拟实现,这里我们模拟实现string类依然分多个文件进行。在最后会附上string类模拟实现的源代码。

2025-02-25 18:28:31 856

原创 C++之string类详解(超详细)

在我们C语言阶段,我们只接触了一些基础的变量,当时我们如果想要存储一个字符串变量,我们需要使用一个字符串数组来进行存储,然后以'\0'作为结束的标志,而且确定后,字符串的大小是不可再更改的。在后面的学习与实践中,开始对字符串进行一些操作,尽管C语言中提供了一些处理字符串的函数但是使用起来并不方便,于是C++引入了string类。这节我们介绍了string的引入,以及它丰富的接口,其实在后面的STL学习与string十分相像的,其中好多函数都是相似的,希望我们能够触类旁通,举一反三。

2025-02-22 20:36:19 2054

原创 C++模板初了解

在我们之前学习C语言的时候,我们初次接触编程,无论什么都得我们自己手搓,这是因为C语言是一种入门的基础编程语言,很多东西无法直接调用出来,需要我们自己手动去实现,尽管手搓代码能让我们熟悉编程,提高代码能力,但是什么东西都得自己来敲,实在有点头疼,C++作为C语言的进阶版,它明显知道了这个问题,于是他为了提高效率,做了很多东西让我们直接调用,这节我们来学习一下C++中的模板。

2025-02-02 16:54:13 950

原创 C++中的内存管理

在C语言解答我们就已经学习了内存里面的那些东西,我们也会使用动态内存的一些函数,但是那些函数都是在C语言中所使用的,现在我们学习C++了,也要学习一下C++中动态内存的一些东西。class Apublic://写了A类的构造函数(带缺省参数): _a(a)//A类的析构函数~A()private:int _a;int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间。

2025-02-01 20:28:10 1018

原创 C++中的类与对象(下)

1.无论是否显示写初始化列表,每个构造函数都有初始化列表(在开始学习构造函数时我们没有提及,这里补充到)2.无论成员变量是否在初始化列表中进行初始化,每个成员变量都会走初始化列表。这里,我们就将C++中的类与对象初步学习完了,我们现在是大概了解了一下类与对象,后面的水还很深,我们不能松懈下来,要继续努力~

2025-02-01 00:28:24 571

原创 C++中的类与对象(中)

在C++类中,有几个自带的函数,这些函数不需要我们自己去写,编译器会帮我们默认生成,别看它们是编译器默认生成的,其实作用还不小呢,接下来就让我们学习一下这几个默认函数吧。在这节我们介绍了类中自动默认生成的6个函数,但是其主要还是前面四个函数,这四个函数对于后面还有着许多用处,希望我们能够好好理解,至于后面两个函数我们要知道有,并且它是什么样子,怎么用就可以了。学路漫漫,加油啊~

2025-01-29 16:33:45 1001

原创 C++中的类与对象 (上)

在C++中,类(Class)是一种用户定义的数据类型,它将数据(成员变量)和操作这些数据的函数(成员函数)封装在一起。它是一种自定义的数据类型,它与我们在C语言中学习的结构体是一样的,由我们用户自己来定义数据类型,但是它的功能比结构体更加强大,在C语言中的结构体中只能够存放一些成员变量,不能够将函数放进去。而类能够很好地将二者封装在一起,帮助程序员设计更结构化、易维护的程序。类的主要作用是实现面向对象编程的封装、继承和多态等特性。public:// 公有成员// 成员变量// 成员变量。

2025-01-18 12:10:04 896 1

原创 C++入门基础

最近5年里,编程语言的发展可谓是进入了井喷时期,每年都会诞生超过50多种新的编程语言,但是C++语言始终在编程语言排行榜中位居前三,还不时地挑战榜首。由此可见C++的含金量了,但是它的学习难度也很大,但是我们不要害怕,正如翁恺老师所说的:“计算机的所有东西都是人做出来的,别人能想出来的,我也一定能够想出来,在计算机里没有任何黑魔法,所有的东西只不过是我现在不知道而已。总有一天,我会把所有细节,所有内部的东西全都搞明白。

2025-01-16 23:59:32 629

原创 数据结构之排序

在之前,我们已经学习了基本的数据结构:线性表,栈,队列,树。这些数据结构往往是我们解决问题的一个工具,今天我们再来学习一种解决问题的工具----排序。

2024-11-30 16:36:48 1115

原创 非线性表之树

我们在生活中,很多问题并非是一对一,更多的反而是一对多或者多对多的情况比如人类的族谱以及各种社会组织机构的实现。对于这种情况,前人们已经想到了解决方案了,我们通过之前的几种线性结构推导出来了几种非线性结构,很好地解决了这些问题。

2024-11-24 21:10:57 938

原创 线性表之栈与队列

在之前我们已经学习了线性表中的顺序表和链表,我们学习了它们的一些基本性质以及如何去实现它们。但是我们在工作时那两种数据类型还远远不够,今天我们再来学习两种线性表(操作受限的线性表),这两种线性表有时候能起到事半功倍的效果。这次我们学习的这两种线性表是两种操作受限的线性表,但是它们两个的实现方式是基于之前的顺序表和链表,因此,我们不仅要学习现在的,也要熟练掌握之前所学过的。有句老话怎么说来着:温故而知新,可以为师矣。

2024-10-28 21:49:53 1039

原创 线性表之双向链表

在这之前,我们已经学习了单链表。我们发现这些链表都是一个接一个朝一个方向接下去,有时,我们想要查找某个结点的时候还得从头开始遍历查找,尽管我们已经学习了顺序表,查找某个数据确实很方便,但是要想插入某个数据就麻烦了。对于这两个缺点,我们今天再来学习一种链表,很好地弥补了这两个缺点。在我们了解双向链表之前,我们来认识到底有多少种链表如上图,我们用一幅图片展示链表之间的关系,根据排列组合可以知道,上面一共有2*2*2=8种,这8种链表挺像的但又不太像。我们之前学习的单链表全称是不带头单向不循环链表。

2024-10-26 15:02:37 676

原创 线性表之单链表

我们在之前已经初步了解了数据结构中的两种逻辑结构,但线性结构中并非只有顺序表一种,它还有不少兄弟姐妹,今天我们再来学习一下单链表。

2024-09-15 14:15:08 700

原创 线性表之顺序表

数据结构中有逻辑结构和物理结构(存储结构),其中逻辑结构与在电脑中的存储形式无关,往往表示的是一种逻辑关系。而逻辑结构又分为线性结构与非线性结构。本质来说就是一对一的关系与非一对一的关系。我们今天要介绍的就是线性结构中的顺序表考如上就是顺序表的一些基本介绍和它实现方式,我个人认为,如果我们之前数组和指针这块学的不错的话,这块基本没问题的,然后我们多练习几遍就ok了。

2024-09-13 10:49:50 1064

原创 预处理详解

预处理主要由预处理器完成,预处理器是编译器的一部分,它在编译之前对源代码进行处理。预处理的主要任务包括宏替换、文件包含、条件编译和一些其他的源代码操作。我们有时候在代码中可能重复使用一个数值,但是我们多次输入相同的值可能会出错(对于一些数值较大,位数较多的数),那么这时候咱们就可以尝试定义一个常量。其实,#define的作用不仅仅如此,它还可以定义其它的内容,如果一个关键字太长太繁琐,我们就可以将其用#define定义为一个简单的字符。

2024-08-31 17:16:56 1893

原创 编译链接那些事

为了我们后续能够更加清晰地学习后面的内容,今天我们来了解一下我们平时在输入代码后,计算器中的一些操作。

2024-08-29 16:13:39 594

原创 文件操作

我们在vs上面写的那些代码,往往只能短暂地展示在终端上,它们存在于内存中,通过某种方式来实现相应的功能。那么如何使那些程序数据更加长久地保存下来呢?这时候我们就可以使用文件来保存这些数据了,之后如果我们想要调用这些数据,只要找到相应的文件即可,那么今天就让我们来学习学习文件的一些相关操作吧。在C语言中,文件通常指的是存储在磁盘(硬盘)上的数据集合。在程序设计中,我们所谈的文件一般有两种:程序文件,数据文件(从文件功能的角度来进行分类的)。

2024-08-26 23:42:13 728

原创 动态内存管理

在我们使用C语言的时候,它将一些工具已经制作好了,空间分配好了。在上一节中我们学习了一些自定义数据类型,我们可以根据自己的需求来写出相应的数据类型。今天我们再来学习一种自己分配内存空间的方法——动态内存管理。内核空间:操作系统内核的内存区域,存放内核代码和数据。程序无法直接访问。栈:用于存储局部变量、函数参数和返回地址。栈由编译器自动管理。内存映射段:用于映射文件到内存或动态链接库。通过mmap函数等进行管理。堆:用于动态分配内存(如通过malloccallocrealloc程序员需要手动释放(

2024-08-23 13:17:09 959

原创 what the 自定义数据类型

在前面我们学习一些了C语言中的一些基本的数据类型,它们是C语言一开始就设计好的,咱们拿去使就好了。今天咱们再来学习一些自定义的数据类型,顾名思义就是咱们自己定义一个数据类型,然后再去使用它们。这次,我们学习了C语言中的自定义类型,这对于我们后面学习数据结构也会有很大作用,希望我们能够好好理解消化这节知识。

2024-08-13 21:24:00 974

原创 数据在内存中的存储

在我们学习数据存储之前,咱们先来了解一下什么是大小端字节序:对于一个超过一个字节的数据在内存中存储时,就会存在存储顺序问题,对此,咱们就提出了大端字节序存储和小端字节序存储。大端字节序存储:这种存储方式是当数据的低位字节内容保存在内存的高地址处,数据的高位字节内容保存在内存的低地址处。小端字节序存储:这种存储方式是当数据的低位字节内容保存在内存的低地址处,数据的高位字节内容保存在内存的高地址处。ps:数据在内存中是连续排列的,因此内存中会有高低地址之分。

2024-08-11 18:40:54 663

原创 C语言中字符串函数与内存函数

在之前,我们学习了许多用到字符串的地方,字符串函数提供了操作和处理文本数据(字符串)的工具,使得你可以灵活地对字符串进行各种操作。除此之外,我们再来学习一些内存函数。

2024-07-28 13:19:53 941

原创 初识指针 4.0

在前面我们已经了解到了指针的一些基本概念与用法,在本节,咱们再来对指针进行更加深一步的了解。少年郎不怕前路难,让我们一起向前进发吧!

2024-07-19 16:30:46 1870 1

原创 初识指针 3.0

宝子们,想象一下你在一个大型的书库里找书。书库的书架上摆放着很多排书,每一排书架上都有很多本书。现在,你手里拿着一张地图(指针),这张地图告诉你每一排书架的具体位置。而书架上的每一本书(数组元素)都有自己的编号(索引)。今天这回咱们就来聊聊二维数组与指针之间的关系吧。

2024-07-15 21:58:02 859 3

原创 初识指针 2.0

各位宝子们,想象你有一排房子,每栋房子里有一个人。这排房子就像是一个数组,每栋房子里的人就像是数组中的元素。现在,你手里拿着一张地图,地图上标记了每个房子的地址。这张地图就像是指针,它指向每个房子的具体位置。使用指针和数组时,你可以根据地图上的地址(指针)找到并操作对应的房子(数组元素)。如果你想找到第三个房子的人,你可以查看地图上第三个地址,然后直接去那栋房子,而不需要逐个检查每一栋房子。这节,就让我们唠嗑唠嗑数组与指针之间的爱恨纠缠吧。

2024-07-13 20:01:33 498

原创 初识指针 1.0

各位宝子们,想象一下你家的信箱。信箱里装着各种信件和包裹,每个信箱都有一个唯一的地址。现在,你手里拿着一张纸条,上面写着某个信箱的地址。这张纸条就像是指针,它并不是信件本身,而是告诉你在哪里可以找到这个信件。在计算机编程中,变量就像是那些放在信箱里的信件或包裹,而指针则是用来指向这些变量的地址的东西。通过指针,我们可以找到并操作这些变量,就像你用地址纸条找到并取出对应的信件一样。

2024-07-12 18:03:11 2014 1

原创 数据结构(C语言版本)1.0

首先我们要知道何为数据结构?===>数据结构是一种组织和存储数据的方式,旨在使数据能够高效地被访问和修改。它涉及到在计算机中组织数据的设计和实现方法。而我们之前所学习的C语言就好比是一种语言,而数据结构就是一种说话的技巧,如何使说话更加简洁,有逻辑,容易让别人听懂,这种表达技巧不管使用中文还是英文都能够实现。C语言是用来讲解数据结构的一种方法,除此之外我们还可以用Java语言来讲解数据结构,这里就不过多赘述了。

2024-07-09 13:12:52 1100 3

原创 What the 数据类型

范围:浮点数的范围取决于其位数。例如,当将一个有符号的char类型转换为int类型时,如果最高位是1,则在扩展时会自动填充1,即进行符号扩展。6) unsigned long longint(简写:unsigned long long),无符号整数, 不能表示负数,其范围为0 至18 446 744 073 709 551 615。符号位表示浮点数的正负,指数位表示 2 的幂,尾数位表示浮点数的精度。这种区别主要是因为有符号类型的最高位被用作符号位,表示正负性,而无符号类型则将所有位都用作数字位。

2024-05-12 22:23:31 601 4

空空如也

空空如也

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

TA关注的人

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