- 博客(61)
- 收藏
- 关注
原创 【C++】map和set的使用
C++中的关联式容器是一种可以存储键-值对的容器,它使用键来快速检索值。与序列式容器不同的是,其里面存储的是<key, value>结构的键值对(不懂的可以去看看上期的博客),在数据检索时比序列式容器效率更高。C++标准库提供了四种关联式容器:std::set、std::multiset、std::map和std::multimap。std::set:std::set是一个基于红黑树实现的有序集合,它存储唯一的元素。元素按照默认的比较函数进行排序,也可以通过自定义比较函数进行排序。
2024-07-06 23:32:52
1178
13
原创 【C++】二叉搜索树的模拟实现
每个节点最多有两个子节点,分别称为左子节点和右子节点。若它的左子树不为空,则左子树上所有节点的值都小于根节点的值。若它的右子树不为空,则右子树上所有节点的值都大于根节点的值对于树中的任意节点,它的左子树中的所有节点的值都小于该节点的值,它的右子树中的所有节点的值都大于该节点的值。它的左右子树也分别为二叉搜索树。这些性质确保了二叉搜索树中的数据按照一定的顺序排列,左子树中的节点值小于父节点,右子树中的节点值大于父节点。这样的性质使得二叉搜索树能够提供高效的查找、插入和删除操作。
2024-07-05 00:20:40
762
1
原创 【C++】多态(详解)
多态的概念:多态(polymorphism)是C++中面向对象编程的一个重要概念,它指的是同一种消息(方法调用)在不同的对象上产生不同的行为。这种特性使得程序设计更加灵活,提高了代码的可扩展性和可维护性。(通俗来说,就是多种形态, 具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态)。在C++中,虚函数是一种特殊的成员函数,用于实现多态性。通过将基类的成员函数声明为虚函数,可以在派生类中对该函数进行重写。当通过基类指针或引用调用虚函数时,实际调用的是相应派生类中的函数。
2024-07-03 17:46:36
1476
14
原创 【C++】继承(详解)
C++中的继承是一种面向对象编程的特性,它允许一个类(子类)继承另一个类(父类)的属性和方法,并且可以添加自己的属性和方法。通过继承,子类可以重用父类的代码,减少重复编写代码的工作量。在C++中,使用关键字"extends"可以声明一个类继承另一个类。子类将自动继承父类的非私有成员和方法,并可以通过重写(override)父类的方法或添加新方法来实现自己的行为。(光看文字大家肯定还是觉得晦涩难懂的,我们直接看代码)
2024-06-27 17:11:04
3075
20
原创 【C++】模板详解
模板是C++中的一种编程工具,用于在编译时实现泛型编程。它允许程序员编写与特定数据类型无关的代码,以便在不同的情况下重用和适应不同的数据类型。模板可以用来定义函数模板和类模板。函数模板允许在不同的数据类型上重复使用同一段代码,而类模板允许在需要时使用不同的数据类型实例化。使用模板的好处是可以提高代码的重用性和灵活性。它允许程序员编写通用的算法和数据结构,可以适应不同类型的数据,而无需为每种类型编写不同的代码。.........
2024-06-25 00:21:06
1188
10
原创 【C++】STL中优先级队列的使用与模拟实现
C++中的优先级队列是一种特殊的数据结构,它类似于队列,但是元素按照优先级进行排序。在优先级队列中,元素的插入被赋予了一个优先级值,具有较高优先级的元素将排在较低优先级的元素之前(用大白话讲,就是你队列中的元素按照某种要求进行了对应的排序)。C++中的优先级队列通常使用堆(heap)作为底层实现,可以是最小堆或最大堆。最小堆意味着优先级值较小的元素具有较高的优先级,而最大堆则相反。优先级队列的主要操作是插入和删除最高优先级的元素。
2024-06-22 19:49:37
1219
18
原创 【C++】STL中stack和queue(适配器版)的模拟实现
适配器是一种设计模式,也是一种编程工具,用于将一个类的接口转换成另一个类的接口。适配器模式允许不兼容的类之间能够协同工作。在C++中,适配器是指通过改变容器的接口使其适用于不同的需求。适配器可以封装容器,以提供一种更简单、更有限的功能接口,或者可以通过改变容器的工作方式来满足特定的需求。迭代器适配器:用于改变迭代器的行为,如reverse_iterator适配器用于反向遍历一个容器。容器适配器:用于改变容器的接口,如stack适配器用于实现堆栈功能。
2024-06-13 15:17:51
760
34
原创 【C++】STL中stack、queue、deque的使用
在C++中,deque(双端队列)是一种线性容器,允许在两端进行插入和删除操作。deque是 “double-ended queue” 的缩写。deque类似于vector,但不同之处在于deque允许在容器的前端和后端进行高效的插入和删除操作,而vector只支持在末尾进行插入和删除操作。deque还提供了随机访问元素的能力,类似于数组。deque的主要特点包括:在两端进行高效的插入和删除操作。随机访问元素的能力。动态分配存储空间,自动扩展和收缩容量。
2024-06-12 16:06:15
755
23
原创 【C++】STL中List的基本功能的模拟实现
在前面学习了STL中list的使用方法,现在我们就进一步的讲解List的一些基本功能的模拟实现,这一讲博主认为是最近比较难的一个地方,各位一起加油。
2024-06-07 17:20:42
1207
2
原创 【C++】STL中list的使用
在C++中,list是一个双向链表容器(带头双向链表如下所示)。它是C++标准库中的一种容器类型,可以用来存储和管理数据。list的特点是可以高效地执行插入和删除操作,但是在访问和搜索元素方面相对较慢。list的元素类型可以是任意类型,包括基本数据类型和自定义的对象类型。list容器提供了一系列的成员函数和操作符,可以用于在链表中插入、删除和访问元素,以及对链表进行遍历和操作。通过使用list容器,可以方便地实现一些功能,如实现队列或栈、排序和合并链表等。由于其特殊的数据结构,list。
2024-06-07 15:16:24
1418
22
原创 【C++】STL中vector常见功能的模拟实现
在上一篇中我们讲到了Vector的一些常见功能的使用方式,今天为了进一步的去学习Vector和能够更深度的去理解Vector的一些底层的原理。
2024-06-02 17:41:15
955
30
原创 【C++】vector常见的使用方式
在C++中,vector是一种动态数组容器,可以存储一系列具有相同数据类型的元素。它提供了一些操作函数,如插入、删除、访问等,使得对数组进行操作更加方便和灵活。可以在运行时动态调整大小,不需要事先指定大小;可以自动处理内存分配和释放,减少手动管理内存的工作量;提供了更多的操作函数,如插入、删除、查找等;可以通过下标访问元素。int main()cout << "删除前" << endl;cout << "删除后" << endl;// 删除 vec 的最后一个元素。
2024-05-28 16:53:16
1282
28
原创 【C++】string类的模拟实现
在上一篇中我们讲到了string类的使用方法,今天我们将进一步的去学习string类,去底层看看它顺带模拟实现部分的内容。
2024-03-17 22:11:25
1310
29
原创 【C++】内存管理
结论申请空间时:malloc只开空间,new既开空间又调用构造函数初始化。释放空间时:delete会调用析构函数,free不会.public:Myclass()//默认构造cout
2024-02-20 12:11:14
1362
30
原创 【C++】类和对象(五)友元、内部类、匿名对象
前面我们说到类和对象是一个十分漫长的荆棘地,今天我们将走到终点,也就是说我们对于C++算是正式的入门了。
2024-02-16 21:23:55
1088
34
原创 【Linux】环境基础开发工具的使用之gdb详解(三)
上一篇文章中我们讲解了Linux下的gcc与g++的使用,今天我们将进一步的学习。
2024-02-07 11:45:13
2053
60
原创 【C++】类和对象之运算符重载(三)
在前面我们知道在类和对象中有六个默认成员函数,并学习了其中三个构造函数、析构函数、拷贝构造函数,今天我们将进一步的学习.赋值运算符重载。
2024-02-04 11:53:49
871
12
原创 【Linux】环境基础开发工具的使用之gcc详解(二)
上一篇文章中我们讲解了Linux下的vim和yum的工具的使用,今天我们将在上一次的基础上进一步的讲解开放工具的时候。
2024-02-02 11:46:49
1499
11
原创 【Linux】环境基础开发工具的使用(一)
在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序。但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装。
2024-02-01 12:27:37
1654
45
原创 【C++】类和对象之构造函数、析构函数、拷贝构造函数(二)
在上一篇我们对于C++中类和对象有了一个初步的了解,今天我们将进一步的学习,今天我们目标是对构造函数、析构函数、拷贝构造函数进行一个初步学习在后面也会进一步的学习,一起加油呐!
2024-01-31 15:59:45
1238
6
原创 【C++】类和对象(一)
C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题,而在C++中C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成,通俗的理解C语言好比送外卖我们需要关注如何下单如何拿,而C++只需要关注如何点外卖。C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。比如:之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量;class 类的名称 {//类体:成员变量--属性 成员函数---功能 }
2024-01-30 12:09:14
1439
47
原创 【C++】引用、内联函数、auto关键字等
在前面我们讲解了C++入门基础的一些学习例如命名空间、缺省参数、函数重载等。今天我们将进一步的学习,跟着博主的脚步再次往前迈一步吧。
2024-01-29 12:30:57
947
28
原创 【C++】入门基础
C++是一种通用的编程语言,它是一种高级、静态类型的编程语言,同时也是一种面向对象的语言。C++是C语言的扩展,它继承了C语言的语法和功能,并添加了许多新的特性。C++支持面向对象的编程范式,包括封装、继承和多态性。它还提供了许多其他功能,如异常处理、模板元编程和标准模板库(STL),使程序员能够更高效地编写复杂的程序。C++具有高性能和灵活性,可以用于开发各种类型的应用程序,包括桌面应用程序、嵌入式系统、游戏、图形界面应用程序、操作系统和网络应用程序等。
2024-01-26 21:54:20
9266
66
原创 【数据结构】归并排序的两种实现方式与计数排序
在前面我们讲了各种常见的排序,今天我们就来对排序部分收个尾,再来对归并排序通过递归和非递归的方法进行实现,与对计数排序进行简单的学习。
2024-01-17 17:41:50
1398
36
原创 【数据结构】双向带头循环链表的实现
到这里我们可以发现,当我们写了一个插入之后会发现,那双向链表的头插和尾插,我们可以直接用我们刚刚写的插入的函数直接来实现,就完全没必要单独写尾插和头插了,至于为什么放在最后才说,是因为作者想和大家一起锻炼一下自己的思维能力,这里直接放代码就不演示了。void ListPushBack(LTNode* pHead, LTDatatype x)//双向链表尾插//直接再phead之前插入即可void ListPushFront(LTNode* pHead, LTDatatype x)//双向链表头插。
2023-12-30 17:20:39
1202
10
原创 【数据结构】快速排序(4种方式实现)
任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。
2023-12-29 20:54:20
2816
30
原创 【数据结构】插入排序、选择排序、冒泡排序、希尔排序、堆排序
生活中我们总是会碰到各种各样的排序,今天我们就对部分常用的排序进行总结和学习,今天的内容还是相对比较简单的一部分,各位一起加油哦!
2023-12-28 21:46:21
849
31
原创 【数据结构】二叉树的模拟实现
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。光看文字可能大家理解不了,我们看下图。二叉树是一种常见的树型数据结构,由若干个节点组成,每个节点最多有两个子节点,分别称为左子节点和右子节点。每个节点最多有两个子节点,且子节点的位置是固定的。左子节点在父节点的左边,右子节点在父节点的右边。二叉树的子树也是二叉树。二叉树的每个节点都有一个值,可以是任意类型的数据。
2023-12-19 21:07:45
1999
47
原创 【数据结构】堆的模拟实现
堆(Heap):我们可以通俗的理解成一种二叉树,但最大值或最小值是存在上面的,且堆中某个节点的值总是不大于或不小于其父节点的值。并且堆总是一棵完全二叉树。光看文字我们可能无法很清晰的理解堆,我们来看下图。
2023-12-12 21:30:05
372
18
原创 【数据结构】栈和队列的模拟实现
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出的原则(如下图所示)。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出(我们可以通俗的理解成一头进一头出,先进去的先出去)。入队列:进行插入操作的一端称为队尾。出队列:进行删除操作的一端称为队头。具体如下图。
2023-11-21 21:22:08
625
27
原创 【数据结构】单链表之--无头单向非循环链表
前面我们学习了动态顺序表并且模拟了它的实现,今天我们来进一步学习,来学习单链表!一起加油各位,后面的路只会越来越难走需要我们一步一个脚印!
2023-11-07 18:53:05
721
53
原创 【数据结构】顺序表的学习
在之前我们学习了C语言的各种各样的语法,因此我们今天开始学习数据结构这一个模块,因此我们就从第一个部分来开始学习"
2023-10-31 16:41:31
495
46
原创 【C语言】用函数实现模块化程序设计
C语言要求,在程序中所用到的所有函数,必须“先定义,后使用”。例如max函数去求两个数的较大者,必须事先先按规范对它进行定义,指定它的名字、函数返回值类型、函数实现的功能以及参数的个数与类型,将这些信息通知编译系统。这样,在程序执行max时,编译系统就会按照定义时所指定的功能执行。如果事先不定义,编译系统怎么能知道max是什么、要实现什么功能。定义函数应包括以下几个内容指定函数的名字,以便以后按名调用指定函数的类型,即函数的返回值类型指定函数的参数的名字和类型,以便在调用函数时向它们传递数据。
2023-10-22 16:21:14
1184
43
原创 【C语言】文件的操作与文件函数的使用(详细讲解)
磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。输出流(stdout):简单的理解就是你把你C语言所写的程序,传递给了某个文件就是输出流。如下图:输入流(stdin):你用这C语言程序读取文件,就是输入流,如上图所示。标准错误流(stderr)
2023-10-12 18:13:45
982
61
原创 【C语言】利用数组处理批量数据(字符数组)
用来存放字符数据的数组是字符数组。在字符数组中的一个元素内存放一个字符。定义字符数组的方法与定义数值型数组的方法类似。char c[10];c[0] ='I';c[1] =' ';c[2] ='a';c[3] ='m';c[4] = ' ';c[5] = 'h';c[6] ='a';c[7] ='p';c[8] = 'p';c[9] = 'y';以上定义了c为字符数组,包含了10个元素。赋值以后数组的状态如下图所示:由于字符型数据是以整数的形式(ASCII代码int c[10];
2023-10-06 16:47:17
1131
39
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人