- 博客(51)
- 收藏
- 关注
原创 C++STL详解(七)——Stack和Queue
第一个构造函数:使用默认的适配器定义栈第二个构造函数:使用特定的适配器定义栈如果没有为stack指定特定的底层容器的话,默认情况使用deque(双端队列)。使用默认的适配器定义队列。使用特定的适配器定义队列。如果没有为stack指定特定的底层容器的话,默认情况使用deque(双端队列)。
2024-08-17 17:33:48 719 10
原创 C++STL详解(六)——list类的具体实现
list的迭代器类,实际上只是对结点的指针进行了封装,并对其各个操作符进行了重载,使得结点指针的各种行为看起来和普通指针一样。
2024-08-14 23:39:14 873
原创 C++STL详解(四)——vector类的具体实现
在上篇文章中,我们已经学习了vector的具体接口使用方法,在本篇文章中,我们将学习实现一个vector容器。
2024-08-12 20:35:51 704
原创 C++STL详解(五)——list类的接口详解
list容器的底层是双向循环带头链表,在CPP中,我们对双向循环带头链表进行了一定程度的封装。双向链表在这里我们要学习六种list的构造方式。构造1:构造一个某类型容器构造2:构造一个含有一个值的某类型容器//构造只含有一个数值3的结点的list容器构造3:构造一个含有n个值的某类型容器//构造含有三个数值都是5的结点的list容器构造4:复制某个容器构造该容器的复制品//拷贝构造构造5:使用某个迭代器区间进行构造//迭代器区间初始化构造6:使用列表构造一个某类型容器//使用列表构造。
2024-07-25 23:48:50 898 11
原创 C++STL详解(三)——vector类的接口详解
vector容器的底层是顺序表,在CPP中,我们对顺序表进行了一定程度的封装。顺序表。
2024-07-24 23:47:05 1079 51
原创 C++STL详解(一)——string类的接口详解(下)
在这里需要大家注意的是,capacity表示开辟的空间大小,而size求出的是开辟的空间内的元素个数。在用>>进行输入操作时,当>>读取到空格便会停止读取,基于此,我们将不能用>>将一串含有空格的字符串读入到string对象中。另外,值得一提的是,如果resize给出的值大于capacity的值的话,会调用扩容函数。但是,我们发现了一个问题,如果我们输入的字符串中有空格的话 则空格后的字符会进入缓冲区。string元素的访问有两种方式,我们可以通过重载的[]访问,也可以通过at函数访问。
2024-07-23 21:03:36 659 38
原创 C++STL详解(一)——String接口详解(上)!!!
string类是CPP中STL中处理字符串的一个类,它给我们提供了丰富的接口以供于我们使用。虽然我们传统的C库中有相关的函数以供于我们使用,但是由于操作起来比较麻烦,因此CPP中实现了string类。string类所在的头文件为
2024-07-23 16:42:58 419 20
原创 CPP入门:日期类的构建
这里需要注意的是,由于这个函数运行结束之后,tmp会先被销毁掉,再进行返回,因此我们如果返回值为引用的话,则会出错。之后我们一直减去当月的天数,并让月份加1,如果月份为13,则年份加1,月份赋为1。在日期类中,我们应当是已知每个月份有多少天的,因此我们还需要在日期内中写一个成员函数来获得当月的天数。后置++是先使用后++的。此外,我们的日期类还应当能够实现对日期的打印、对日期类的相关计算、输入输出的重载等成员函数。与实现加等类似的是,这里我们也是类似的步骤,通过一个循环来不断的更新年月日。
2024-07-02 22:36:45 1159 48
原创 数据结构入门:探索数据结构第一步
数据结构是由“数据”和“结构”两词组合而来。什么是数据?常见的数值1、2、3、4......、学生管理系统中保存的学生信息(学号、年龄、年级等到)都是数据什么是结构?我们想要大量的使用某一个类型的数据时,需要手动定义大量的独立的变量对于程序来说,可读性非常差,因此我们会借助数组这样的数据结构将大量的数据组织在一起,结构就可以理解为组织数据的方式。打个比喻,如果我们把叫“裤衩”的羊放生到草原上,我们自然很难找到它;但,如果我们把这只羊放到羊圈里,我们就可以很轻松的找到它。对于我们在这个地方的学习而言,
2024-06-12 20:31:38 1319
原创 进军rust:从0开始学习rust语法
Rust语言中的基础数据类型有以下几种:整数型简称整型,按照比特位的长度和有无符号位可以分为以下几种isize和usize两种整数类型是用来衡量数据大小的,它们的位长度取决于所运行的目标平台,如果是32位架构的处理器将使用32位位长度整型。整型变量默认使用i32.Rust和其他语言一样支持32位浮点数(f32)和64位浮点数(f64)64位浮点数的精度更高,因为它有64个比特位可以表示数据因为现代计算机处理器对两种浮点数计算的速度几乎相同,默认情况下计算机会使用六十四位浮点数。3.其他类型其他类型
2024-06-09 00:22:32 1124 3
原创 一篇文章讲透排序算法之堆排序
在学习这篇文章之前,请大家先学习堆这一数据结构中堆的概念,向下调整算法,向下调整建堆。堆的实现堆排序就是利用堆里面学习过的知识点进行排序,如何进行排序呢?
2024-05-27 09:26:01 477 4
原创 一篇文章讲透排序算法之希尔排序
希尔排序是对插入排序的优化,它的思路是先选定一个整数作为增量,这里我们以gap(间隔)表示,将间隔为gap的数据分为一组,这样就可以分出gap组以gap为公差的等差数列的数据组。现在我们的数组已经非常接近有序,我们最后再以1为间隔,得到一组以1为间隔的等差数列,再完成最后一次排序,也就是直接插入排序,即可使得我们的数组有序。在这里也可以给大家大概画一下图,由于每次排序都会对后续的排序产生影响,因此我们后续的排序移动的数据会越来越少,因此效率还是比较高的。这么一直比较下去,就可以完成我们第一次预排序的效果。
2024-05-25 20:52:14 858 3
原创 C++入门:从C语言到C++的过渡(3)
以inline修饰的函数被叫做内联函数,编译时C++的编译器会在调用内联函数的地方展开函数定义,没有建立栈帧的开销,内联函数能够提升程序运行的效率。在C++中,随着程序越来越复杂,程序所用的类型也越来越复杂。为了简化代码,增加代码的可读性,C++11引入了自动类型推断auto。在C语言中,auto修饰的变量,是具有自动存储器的局部变量。auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。
2024-05-25 16:58:38 808 2
原创 C++入门:从C语言到C++的过渡(2)
函数重载是函数的一种特殊情况,C++允许在同一作用域中声明同名函数,这些同名函数的形参列表(形参个数或形参类型或类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。
2024-05-25 14:35:48 970 5
原创 一篇文章讲透数据结构之堆!
堆(Heap)可以被看作一种特殊的数据结构,堆通常是一个可以被看成完全二叉树的数组对象。根据堆的数值的关系,可以将堆分为两类:通俗解释来说:若是任意一个根结点的值都大于其子结点,则被称为大根堆,因为根大!若是任意一个根结点的值都小于子结点,则是小根堆,因为根小! 既然堆是一种二叉树,那么我们就可以采用链式存储或者数组存储来实现这个数据结构。但是考虑到完全二叉树的特性,我们在这里采用数组存储的方式,因为这样既方便访问,也不会浪费空间。既然使用数组存储,就会用到下标,而我们每次插入和删除,都需要计算父结点和子结
2024-05-24 23:24:16 1783 17
原创 C++入门:从C语言到C++的过渡(1)
定义命名空间,需要用的namaspace关键字,后面跟命名空间的名字,然后接一对花括号{},花括号中即为命名空间的成员。//duanku即命名空间的名字,一般开发中是用项目名字做命名空间名那么,命名空间中可以定义什么呢?命名空间中可以定义变量/函数/类型。//变量int N=1;int Add(int left, int right)//函数struct Node//结构体-->类型int val}duan;学习了命名空间的定义了之后,就可以开始学习如何使用命名空间了。
2024-05-24 17:25:39 1076 5
原创 一篇讲透排序算法之插入排序and选择排序
先将数组的第一个元素当作有序,让其后一个元素与其比较,如果比第一个元素小则互换位置,之后再将前两个元素当作有序的,让第三个元素与前两个元素倒着依次进行比较,如果第三个元素比第二个元素小的话,则交换位置,之后再比较第二个元素和第一个元素。此时我们的begin下标处的值已经更新成了mini处的值,而由于我们的maxi和begin是相同的,因此此时我们maxi下标处的值其实是mini处的值。如果begin和maxi重合,根据我们的代码逻辑,我们首先会交换mini和begin位置处的值。这时我们的数组就有序了。
2024-05-23 21:23:36 991 4
原创 一篇讲透数据结构之链式队列
队列(queue)是一种只允许在一端进行插入操作,而在另一端进行删除操作的线性表。其严格遵循。队列与栈类似,实现方式有两种。一种是以的方式实现,另一种以来实现。这两种实现方式各有优劣,并且都有细节需要处理。
2024-05-22 14:27:12 1047 3
原创 一篇文章讲透链式栈!
在上一篇文章中我们已经学习了顺序栈,这篇文章我们来学习链式栈。两种栈的实现方式大同小异,但为了学习到更多的方法,在此篇文章中,我们使用另外一种push栈的方法。
2024-05-21 16:26:29 321 1
原创 一篇文章讲透带头双向循环链表!
前面我们已经学习了单链表,它解决了顺序表中插入或者删除数据需要挪动大量数据的缺点。但仍有需改进的地方。就比如我们需要寻找某个结点的前一个结点,就只能通过遍历来寻找。这样就可能会造成大量的时间浪费。为了解决这个问题,今天就要学习今天的主角-->带头双向循环链表在学习单链表中,我们大家可能被二级指针搞昏了头脑,现在我们实现一个带头的链表,也就是带哨兵位的链表,哨兵位只充当哨兵作用,它在链表的第一个位置,但不保存数据。因此我们在使用时,并不会将哨兵位当作头结点,而是将它的下一个结点当作头结点。
2024-05-19 11:48:51 988 3
原创 一篇文章讲透单链表!!!
链表是一类物理存储结构上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。物理存储结构:真实的在内存中的存储结构。逻辑存储结构:脑袋中构思的存储结构。我们刚刚已经介绍了链表是由指针依次链接形成的一种存储数据的结构。那么,链表里面应该有一个成员是数据,一个成员是指针。现在我先给大家定义一个单链表//数据//指向下一个数据的指针}SLTNode;那么,我们可以画出下图,它的结构应是如此:现在再给大家解释一下链表的分类。
2024-05-18 22:06:52 987 5
原创 解锁联合体和枚举类型魅力
由于联合体共用一块内存空间,因此我们可以得到如下结论:联合体可以避免不必要的内存浪费,使得内存使用更加高效。在C中,是可以用整数给枚举变量赋值的,但由于CPP的类型检查更加严格,所以不能使用整数给枚举变量赋值。我们打印出了联合体的两个成员的地址以及联合体的地址,发现他们是一样的,因此他们共用一块内存空间。由于联合体共用同一块内存空间,在给un.c赋值之后,un.c的值共用了原来un.i的低地址的空间。这些可能取值都是有值的,默认从0开始,依次加1,也可以在声明枚举变量时赋初值。
2024-04-30 10:13:29 685 2
原创 跟裤裤一起探索结构体的奥秘!
位段的声明和结构是类似的,有两个不同:1.位段的成员必须为int类型,有符号无符号都可,但在C99标准中,位段也可选择其他类型。2.位段的成员名后面有一个冒号和一个数字。数字表示其占用的比特位下面来实现一个位段类型struct Aint _a : 2;//占用2个比特位int _b : 5;//占用5个比特位//占用10个比特位//占用30个比特位。
2024-04-24 11:20:12 815 2
原创 裤裤带你学C语言字符串函数库啦!一篇文章讲透!!!
这个是一个字符串比较函数,但是只比较num个字符。这个函数是比较str1和str2的前num个字符,如果相等就继续向后比较,一直比较到第num个字符。
2024-04-23 18:20:37 1061
原创 冒泡排序及冒泡排序版本qsort实现
如此循环往复,当我们第九次遍历的时候,是不是就可以让倒数第二个是最大的了呢,那么,我们整个的数组就有序了!现在我们实现了一个冒泡排序,但是如果我给的数字是1 2 3 4 5 6 7 8 9 10的话,用上面的代码再进行排序,还是要进行一轮又一轮的比较才可以,即便它并不需要交换。现在,我们继续分析,经过这轮比较,每次比较中较大的数都会向右移动一位,这轮比较结束后,最右边的数字一定是目前数字中最大的数字,但是中间9个数字的大小却无法确定,如果你不能理解的话,可重读一遍上面的红字。现在我们就完成了一次冒泡排序。
2024-04-05 15:56:48 744 1
原创 指针(四)
数组指针变量,也就是存放数组地址的指针变量。现在给大家写两行代码,请大家判断一下p1和p2分别是什么。先给大家介绍一下两个知识点1.操作符的优先级:()>[]>*2.一个变量,去掉变量名,就是变量的类型。根据这两个知识点,我们来观察一下这两行代码。第一行代码中,p1要先和[10]结合,因此变量名是p1[10],之后p1[10]再和前面的*结合,因此这是一个指针数组,其中的每个元素的类型是int*。第二行代码中,有括号,先将p2和前面的*结合,说明p2是一个指针变量,然后去掉变量名p2,得到。
2024-04-05 00:01:38 679 2
原创 指针(三)
在前面的文章中,有这样的代码这里我们使用&arr[0]的方式拿到了数组的第一个元素的地址,但其实数组名就是数组首元素的地址。下面我们进行一个测试。但是,有两个例外,arr表示的不是首元素的地址。除了这二者之外,任何地方使用数组名,数组名都代表首元素的地址。现在我们来观察一下这段代码我们发现,这三行代码打印出来的结果一模一样,那么他们的区别在哪里呢?我们刚刚说了&arr表示取出一个数组的地址,他们的区别就在这里。
2024-04-02 22:42:48 1180 4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人