- 博客(32)
- 收藏
- 关注
原创 【C++】模板1.0和STL简介
该语句不能通过编译,因为在编译期间,当编译器看到该实例化时,需要推演模板参数实际类型,通过实参a将T推演为int,通过实参b将T推演为double类型,但模板参数列表中只有 一个T,编译器无法确定此处到底该将T确定为int或者double类型而报错。有了STL之后,若是我们希望使用某个数据结构或者算法什么的,我们就不需要自己手撕一个出来了,直接使用STL里面的模板生成对应的东西就可以使用了,那不爽歪歪!用不同类型的参数使用函数模板时,也就是用函数模板生成对应模板参数(类型)的函数,称为函数模板的实例化。
2024-08-04 20:46:34
816
原创 【C++】内存管理
使用new操作符进行动态内存管理也是有失败的风险的,当失败了就会抛异常,但是吧,俺们平时写的小程序申请那三瓜两枣的空间一般是不会失败的,一般不必担心,所以俺就不检查了。的意思是有一个存放在代码段的常量字符串"abcd\0"(其实代码段存放的是"abcd\0"的ASCII码),pChar是栈上的一个指针变量,这个指针变量指向常量字符串"abcd\0"的首元素。的意思是使用malloc函数在堆区申请了16个字节的空间,ptr1是栈上的一个指针变量,这个指针变量指向这块堆区开辟的空间的首元素。
2024-07-30 01:08:30
718
原创 【C++】日期类
鼠鼠实现了一个日期类,用来练习印证前几篇博客介绍的内容!!本鼠创建一个工程,工程包含三个文件,分别是Date.h、Date.cpp和test.cpp。1.日期类的定义本鼠对日期本鼠对于成员函数大部分都采取声明和定义分离的方式。成员变量无非就是年、月、日呗。还运用了友元的知识。如上代码所示。2.得到某年某月的天数对于这个日期类所要实现的成员函数中有很多场景我们需要得到某年某月的天数,所以我们将这个功能实现成函数。又因为需要频繁调用这个函数,我们将他实现成内联函数。3.检查日期是否合法。
2024-07-05 22:25:06
1089
2
原创 【C++】类和对象3.0
但是如果自定义类型成员没有默认构造函数的情况下,如果我们不在初始化列表显式写该成员,编译器是不知道该如何调用俺们显式实现的构造函数的,所以编译器会认为没有合适的默认构造函数可用,就报错了,所以这种情况我们必须在初始化列表显式写,也就是显式调用其构造函数。难道是对象的具体成员变量定义的位置是在构造函数的函数体当中吗,当然不是,原因跟上面一样,函数体内关于某成员变量的语句可以多次出现,如果说关于某成员变量的语句第一次出现是其定义,那么当关于其成员变量的语句多次出现时,难道其成员变量可以多次定义吗?
2024-07-05 22:23:58
931
原创 【C++】类和对象2.0
看主函数第一条语句创建Date类类型的对象d1,由于Date类中没有显式定义构造函数,就通过编译器生成的默认构造函数创建对象d1,由于内置类型成员变量在类的声明中给了缺省值,这个编译器生成的默认构造函数就将d1的内置类型成员变量初始化成了缺省值,对于d1的自定义类型成员变量_t,去调用它的默认构造函数Time()(本鼠显式定义了),所以d1的自定义类型成员变量_t的成员变量分别被初始化成了14、57、30。很简单,对象a是被const修饰的常对象 ,调用Print函数隐藏的this指针接收a的地址。
2024-06-23 02:01:05
820
原创 【C++】类和对象1.0
我们看PrintA函数内部需要用到this指针解引用的哦,this指针接收到的值是空指针,而且成员变量_a是存储在this指向的空间里面的(成员变量存储在类实例化对象里面),当然会崩溃了。这两个对象个中成员变量是不同的(需要存储不同的属性,所以说是不同的),但是调用同一份函数(类方法是一样的)。this指针是隐藏起来的,拿上面代码来说:当d1调用Init函数时,传递的实参不仅仅有明面上的2024、6和4,还有该对象的地址,即d1的地址,而且第一个传递d1的地址。这些都是编译器完成的,我们不应该显示写出来。
2024-06-04 02:06:19
519
原创 【C++】C++入门1.0
首先我们要知道C++中的域分为:1.全局域;2.局部域;3.命名空间域;4.类域。这个知识对于命名空间的介绍有帮助所以提前介绍。那么开始介绍命名空间如下:定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{} 中即为命名空间的成员。注意:以下代码如果写在.c文件中会报错!1.正常的命名空间定义。// HD是命名空间的名字,一般开发中是用项目名字做命名空间名// 命名空间的成员可以定义变量/函数/类型struct LCDint age;
2024-05-29 00:19:08
889
原创 【数据结构1.0】计数排序
读者老爷好,本鼠鼠最近学了计数排序,浅浅介绍一下!计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用,是非比较排序的一种!这个排序算法不难理解,万物皆可举例,我们举例讲解啊!很久很久以前,有一只可爱的肥龙猫,叫做冬冬。有一天冬冬的男朋友给冬冬出了一个题目:有一组数组a如下,要冬冬用排序算法排成升序。
2024-05-20 00:48:02
857
原创 【数据结构1.0】归并排序
本博客以排升序为例介绍归并排序!我们先看一个问题:有两组均为升序的数组要合并到一组数组当中,要求合并后的数组也是升序的,怎么办?办法:从头开始遍历两组数组,找“小”尾插到合并数组当中。举例如图:这其实是归并的思想!归并排序的基本思想:归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有 序,再使子序列段间有序。
2024-05-18 21:40:58
375
原创 【数据结构1.0】选择排序
鼠鼠前面的博客介绍过选择排序是常见的排序算法,选择排序有但不限于直接选择排序和堆排序!那么鼠鼠今天浅谈一下选择排序!鼠鼠本博客用排升序来介绍选择排序!选择排序的基本思想:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
2024-05-13 23:24:38
323
原创 【数据结构1.0】希尔排序
鼠鼠最近学习了希尔排序,做个笔记!希尔排序也是插入排序的一种捏!本篇博客也是用排升序来举例捏!希尔排序是基于直接插入排序的,是由大佬D.L.Shell提出的。
2024-05-06 21:56:45
1019
3
原创 【数据结构1.0】直接插入排序
最近浅学了直接插入排序,写个博客做笔记!笔记功能除外若能对读者老爷有所帮助最好不过了!直接插入排序是插入排序的一种,那么介绍直接插入排序之前先介绍一下常见的排序算法!
2024-05-05 20:32:33
924
原创 【单片机课设】十字路口交通灯的设计
模拟交通灯运行情况。南北绿灯亮30秒,南北黄灯亮3秒,东西红灯亮33秒;南北红灯亮33秒,东西绿灯亮30秒,东西黄灯亮3秒;要求数码管同步显示时间的倒计时,用定时器实现延时。仿真文件已经上传,下载可用。用到proteus仿真!
2024-05-05 17:50:11
450
3
原创 【数据结构1.0】二叉树
我们在前两篇博客中主要介绍了堆及其应用,针对的对象堆是完全二叉树,存储方式采用顺序结构存储的方式。那么好的,这篇博客我们浅谈二叉树的链式存储,针对的对象是二叉树,并不局限于完全二叉树了!我们先来回顾以下二叉树的定义:一棵二叉树是结点的一个有限集合,该集合:1. 或者为空(就是说空树也是二叉树)。2. 不是空树:由一个根节点加上两棵别称为左子树和右子树的二叉树组成。说简单点呢,二叉树是一颗特殊的树,这颗树的度最大为2,就像是对这颗树的节点进行了计划生育,最多只能生两个节点宝宝。
2024-04-09 00:20:13
1055
1
原创 【数据结构1.0】堆的应用
各位读者老爷好,鼠鼠又来了捏!鼠鼠上一篇博客介绍的堆,那么今天来浅谈以下堆的应用,那么好,我们先来看两个问题:1.如果有一组乱序的数组数据,希望你将这组数组的数据排成升序或降序,该怎么排?2.如果有1万个乱序的数据,希望你找出其中最大的前5个,该这么找到捏?对于问题1,当然可以使用冒泡排序,但是冒泡排序的时间复杂度是O(N^2),显然不是一个很好的方法!鼠鼠我呀在这里介绍一个解决办法:堆排序!堆排序的时间复杂度是O(N*logN),相对于解决办法之冒泡排序好用的不是一星半点捏!
2024-04-01 00:39:48
715
1
原创 【数据结构1.0】二叉树
int size;}Heap;这里重命名int为HeapDataType,大大方便后续代码的维护!用a指向后来动态开辟的连续内存,该连续内存用来存储堆的数据,size用来记录堆的数据个数或者指向堆最后一个数据的下一个,capacity用来记录连续内存可放入数据的容量。这里用一个结构体来定义堆如代码所示,定义的跟顺序表一样,但是我们这里表示的堆对数据的摆放要求是大堆或者小堆,而顺序表就没有这个要求!
2024-03-23 01:23:25
699
5
原创 【数据结构1.0】队列
QNode;int k;}Queue;老样子我们将int重命名成QDatatype,方便以后代码的维护。让后定义并重命名结构体QNode充当队列节点 ,这些节点根据数据元素的入队列或者出队列按需申请或者释放。QNode中成员_data用来存放数据元素,QNode中成员_next用来链接下一个节点。
2024-03-07 22:10:08
1484
4
原创 【数据结构1.0】栈
int top;}Stack;方便后续代码的维护,我们先不妨将int重命名成STDataType。由于实现动态生长的栈我们需要一个STDataType*类型指针a维护以后动态申请的空间(用来存放需存储的数据元素的)。用top指向栈顶元素的下一个元素(可以理解成元素个数)。用capacity记录以后动态图申请空间的大小。将a、top和capacity用结构体包起来并重命名成Stack。
2024-03-06 21:38:04
944
1
原创 【数据结构1.0】双向链表
ListNode;由上分析可知,该链表节点需要包含三个数据域,所以我们定义结构体,结构体成员data用来存储需存储数据、结构体成员next用来存储后一个节点地址、结构体成员prev用来存储前一个节点地址。至于为什么要把int重命名成LTDataType,那是因为如果需存储数据的类型如果有所变化的话,我们只需更改此处的int更改成需存储数据的类型即可,极大方便后续的代码维护。
2023-12-02 04:00:13
989
2
原创 【数据结构1.0】单链表
各位读者老爷好,鼠鼠我又来了哈。鼠鼠我呀现在来基于C语言实现以下单链表,希望对你有所帮助!鼠鼠我上次浅谈了顺序表。但是吧,Any coin has two sides。顺序表有一些缺陷:1.尾部插入效率还不错。头部或者中间插入删除,需要挪动数据,效率低下。2.顺序表满了以后只能扩容。扩容是有一定消耗的,扩容一般是存在一定的空间浪费:一次扩得越多,可能浪费越多;一次扩得少,可能需要频繁扩容。当然,顺序表也有它的优势:得益于它的物理空间连续,顺序表支持随机的下标访问。
2023-11-28 02:37:30
1191
2
原创 【数据结构1.0】顺序表
int size;//有效数据//空间容量}SeqList;根据上面定义的顺序表,咱们创建一个顺序表s1,并实现该顺序表一系列接口实现。SeqList s1;//顺序表。
2023-11-12 22:19:56
1163
5
原创 【数据结构1.0】算法的时间复杂度和空间复杂度
数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。其实简单来说吧。数据结构就是在内存中管理数据。拓展:1.什么是数据库?简单来说:数据库就是在磁盘中管理数据。2.内存和磁盘的异同同:内存和磁盘都是电脑的两个核心存储介质,都是存储数据的两个硬件。异:内存的速度快,需要带电存储;磁盘的速度(相对)慢,不带电存储。
2023-11-11 03:40:59
1125
1
原创 【C语言】内存函数及其模拟实现
各位读者老爷好,继上篇字符串函数模拟实现之后,我现在来介绍一些内存函数,希望能对你有所帮助!另外,博主本身就是编程小白,如有不足,恳请斧正!无论是字符函数、字符串函数还是内存函数,都是C语言的库函数,只是我们根据它的使用对象自己给它们取得名字。博主前面介绍的字符函数和字符串函数的使用对象只能是字符或字符串!而接下来介绍的一些内存函数使用对象就不仅仅局限于字符或字符串,所以内存函数的存在是很有必要的!
2023-10-17 01:35:38
721
9
原创 【C语言】字符函数和字符串函数
各位读者好,小编现在来浅浅介绍一些C语言库函数中处理字符或字符串的函数。注意:1.C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串中或者字符数组中。2.字符串常量适用于那些对它不做修改的字符串函数。3.以下代码的运行环境均处于32位(x86)系统且为小端机器下运行。以下函数都可以在。
2023-10-13 15:53:36
540
3
原创 【C语言】指针和数组笔试题解析
各位读者好,我们现在来看几组指针和数组笔试题,小编才疏学浅,如有错误,恳请斧正!既然是指针和数组相关的笔试题,我们可以先明确数组名的3种意义:1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。3. 除此之外所有的数组名都表示数组首元素的地址。指针变量的大小与指针变量类型无关,不管什么类型的指针变量,大小都是4/8个字节。
2023-09-24 16:54:41
149
7
原创 【C语言】qsort函数模拟实现
各位读者好,上篇文章我们介绍了qsort函数,知道了qsort函数的功能。现在我们用冒泡排序的算法模拟实现qsort函数,小编拙作,恳请斧正,我们开始讲解。
2023-09-17 15:40:26
195
9
原创 【C语言】杨氏矩阵
所以,我们有一个时间复杂度满足要求的方法:我们不难发现杨氏矩阵的左下角和右上角的元素是有特点的。我们以左下角查找为例:如果左下角元素大于需查找元素(比最小的元素还小),我们就可以去掉左下角所在行;如果左下角元素小于需查找元素(比最大的元素还大),我们就可以去掉左下角所在列。有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。我们可以知道一个二维数组满足每行从左到右是递增的,每列从上到下是递增的就可以说它是杨氏矩阵。要求:时间复杂度小于O(N);
2023-09-10 22:20:02
148
2
【单片机课设】十字路口交通灯的设计
2024-06-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人