- 博客(34)
- 收藏
- 关注
原创 C++模板(泛型编程)
C++中的模板是一种通用编程工具,允许编写泛型代码,以便在不同类型的数据上工作而不需要重复编写多个版本的代码。C++中有两种主要类型的模板:函数模板类模板日常使用class和typename没有区别。
2024-02-28 03:42:55 863 13
原创 C/C++内存管理的底层调用逻辑
在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与free不会。
2024-02-05 05:50:28 1145 15
原创 C++类和对象(中)
如果一个类中什么成员都没有,简称为空类。空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。
2024-01-29 00:42:01 899 10
原创 C++类和对象(上)
C语言是面向过程的,关注的是过程,分析出求解的步骤,通过函数逐步解决C++是面向对象的,关注的是对象,将一件事,拆分成不同的对象,靠对象之间的交互完成我们就外卖系统来看看面向过程和面向对象之间的区别:面向过程,我们的关注点应该是用户下单、商家接单以及骑手送餐这三个过程。面向对象,那我们的关注点应该就是客户、商家以及骑手这三个类对象之间的关系。// 类体:由成员函数和成员变量组成 };// 一定要注意后面的分号。
2024-01-25 05:40:59 992 10
原创 Linux基本指令
Linux是一种自由和开放源代码的类UNIX操作系统,该操作系统的内核由林纳斯托瓦兹在1991年首次发布,之后,在加上用户空间的应用程序之后,就成为了Linux操作系统。严格来讲,Linux只是操作系统内核本身,但通常采用“Linux内核”来表达该意思。而Linux则常用来指基于Linux内核的完整操作系统,它包括GUI组件和许多其他实用工具无论是图形化、还是指令本质是一样的,指令是可以携带选项的。
2024-01-23 06:43:08 2869 6
原创 动态内存管理<C语言>
/在栈空间上开辟四个字节//在栈空间上开辟10个字节的连续空间空间开辟大小是固定的。数组在声明的时候,必须指定数组的长度,它所需要的内存在编译时分配。但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道,那数组的编译时开辟空间的方式就不能满足了。这时候就体现出了动态内存开辟的价值。
2023-10-05 22:39:06 315 17
原创 C语言<自定义类型>结构体、枚举、联合
枚举是一个被命名的整型常数的集合,枚举在日常生活中很常见,例如“星期”这个词就是一个枚举,星期一、星期二、 星期三、星期四、星期五、星期六、星期日就是这个枚举里面的成员。enum Day//星期Mon,//0Tues,//1Wed,//2Thur,//3Fri,//4Sat,//5Sun//6这些成员都是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值enum Color//颜色RED=1,GREEN=2,BLUE=4。
2023-08-22 21:13:27 322 17
原创 数据结构<树和二叉树>顺序表存储二叉树实现堆排
1. 满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是 ,则它就是满二叉树。2. 完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。
2023-08-20 20:19:14 1417 20
原创 数据结构【队列】值得一看!
队列,就是常用的数据结构之一。队列的特征是先进先出(First-In-First-Out),就相当于我们现实中排队的样子。队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,以及在表的后端(back)进行插入操作。和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
2023-08-05 08:00:00 224 18
原创 数据结构【栈】有哪些应用场景?
本章会介绍栈的特性以及栈的初始化、销毁、插入、删除、取栈顶元素等…栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照后进先出(Last in Firstout)的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。
2023-05-29 07:45:00 1843 38
原创 数据结构【链表】看完还怕拿不下链表?
无头单向非循环链表具体链表介绍内容请见上一章节本章节主要介绍双向链表以及带头节点和循环的概念和实现,并且本章是在上一章节的基础上加以改造,虽然结构复杂了点,但是要比单链表更好实现🤪从上面的图中我们可以看到,每一个节点都会有一个指针指向前一个和后一个,然后头节点指向最后一个节点,最后一个节点指向头节点,这就是带头双向循环链表。那为什么会有单链表和双链表之分呢?在单链表删除或者查询一个元素时,我们只能单向读取,然后如果删除的话,我们要保存前一个节点,为克服单链表的单向性。
2023-05-26 14:19:22 1023 28
原创 数据结构《链表》无头单向非循环-动图详解
前面学习了顺序表发现,顺序表虽然好,但也有很多不足的地方,比方说,顺序表是一块连续的物理空间,如果头插或者头删,那么整个数组的数据都要移动。但是链表不一样,链表是通过指针访问或者调整,链表是物理空间是不连续的,通过当前的next指针找到下一个。插入删除速度快内存利用率高,不会浪费内存大小没有固定,拓展很灵活。
2023-05-24 16:52:18 902 16
原创 数据结构《顺序表》
线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。
2023-05-18 20:21:04 555 13
原创 【我的C++入门之旅】(上)
1979年,贝尔实验室的Bjarne等人试图分析unix内核的时候,试图将内核模块化,但是发现C语言有很多的不足之处,于是在C语言的基础上进行扩展,增加了类的机制,完成了一个可以运行的预处理程序,称之为C with classes,之后经过不断的完善更新,在C语言的基础上诞生了C++这样一门语言。
2023-05-17 22:51:21 784 10
原创 【数据在内存中的存储】肝货满满
什么大端小端:大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。这句话什么意思呢?接着往下看为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8 bit。
2023-01-05 00:57:15 531 32
原创 【函数】你上街买菜用的着函数吗?
如果库函数能干所有的事情,那还要程序员干什么?所以更加重要的是自定义函数。自定义函数和库函数一样,有函数名,返回值类型和函数参数。但是不一样的是这些都是我们自己来设计。//语句项 } //ret_type 返回类型 //fun_name 函数名 //para1 函数参数写一个函数找出两个整数的最大值x : y;return 0;}告诉编译器有一个函数叫什么,参数是什么,返回类型是什么,但是具体是不是存在,函数声明决定不了。函数的声明一般出现在函数的使用之前,
2022-12-15 08:30:00 1123 23
原创 函数栈帧的创建和销毁(详细讲解)
函数栈帧创建和销毁的过程在不同的编译器下实现会略有差异,具体细节是取决于编译器的,大体逻辑相同。本章以VS2019IDE环境演示相关寄存器:相关汇编命令:先看这段代码:转到反汇编:5.3函数栈帧的创建内容补充:接下来我们就一行行拆解汇编代码:函数栈帧的创建画图演示:main函数中的核心代码:画图演示:Add函数传参:画图演示:函数调用过程:画图演示:当我们跳转到Add函数,就要开始观察Add函数的反汇编代码了:画图演示:我们看一下反汇编代码:回到了call指令的下一条指
2022-12-06 08:00:00 509 31
原创 【调试】你是一名优秀的侦探吗?
说到调试,那肯定少不了Bug的存在,什么是Bug呢?那要从历史上第一个Bug说起,事情是这样的,一个称为“马克二型”的计算机,这还不是一个真正的电子计算机,它使用了大量的继电器。突然有一天马克二型死机了,最后定位到第70号继电器出错,发现一只飞蛾躺在中间,已经被继电器打死。于是用摄子将蛾子夹出来,用透明胶布贴到“事件记录本”中,并注明“第一个发现虫子的实例”。
2022-12-01 09:00:00 950 31
原创 (初阶结构体struct详解)一学就废
有了结构体的类型,那如何定义变量呢?struct Stu 相当于int, float…s1 相当于我们的变量名//名字 short age;//年龄 char sex [ 5 ];//性别 int id;//学号 };//全局变量 int main() {//结构体变量的定义 return 0;}那么如何初始化呢//名字 short age;//年龄 char sex [ 5 ];//性别 int id;//学号 };return 0;}
2022-11-28 18:42:42 350 5
原创 关机程序C语言(快来整蛊你的小伙伴吧)
当我们知道以上关机的命令的时候,就可以用代码的形式写一个让收到关机程序的小伙伴对你言听计从。在程序中输入关机命令:shutdown -s -t 60.写完发给你的朋友,相信他拎着刀十分钟就到你家楼下哈哈哈。输入:shutdown -a. 则会撤销关机命令.这边建议做好防护措施再发给整蛊对象。
2022-11-22 19:25:38 741
原创 冒泡排序(C语言)
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。下面图中只是一个元素进行若干次排序,我们有十个元素,所以我们会排序9次。如果第一个比第二个大,就交换他们两个。针对所有的元素重复以上的步骤,
2022-11-18 23:51:19 181 1
原创 扫雷游戏实现(C语言)
在创建数组之前,我们需要知道数组有几行几列的元素,上面我们说了,需要在9*9的基础上多加两行。1.需要存放布置好的雷的信息,存放排查出雷的信息,所以我们需要两个二维数组。排雷的话,我们需要把布雷的数组和展示出来的数组都传过去,方便排雷和展示。2.排查坐标的时候为了防止坐标越界,我们给数组增加两行,增加两列。2.坐标输入正确的话,我们还需要判断:坐标是否被占用,坐标是不是雷。在布置雷之前,我们需要定义雷的个数在game.h头文件中。因为是布雷,所以我们只需要在布置雷的数组里进行操作。
2022-11-16 01:48:56 844 1
原创 三子棋游戏实现
1.调用test函数来进行打印和选择玩不玩游戏,最少执行一次,我们使用do while循环语句。假设3*3棋盘,三行元素一样或者三列元素一样,或者对角元素一样(空格除外)视为获胜。顺便讲一下在game.c文件中写函数的实现,我们需要在game.h中来进行声明。先打印" %c | %c | %c "2.game.h - 用来声明函数等。1.test.c - 测试的逻辑。3.game.c - 游戏的实现。紧接着进入game()函数内部。再打印 “—|—|—”
2022-11-13 01:16:24 576
原创 猜数字游戏实现(C语言)
首先在屏幕上打印游戏菜单 并且程序至少会执行一次,所以我们用do…while循环语句,用switch语句来选择玩或者不玩。下面看一下game()函数如何实现的、rand和srand如何使用。
2022-11-05 02:38:20 383
原创 strlen三种模拟实现方法以及字符串操作函数和模拟实现(详解)
字符串操作函数求字符串长度·strlen长度不受限制的字符串操作函数strcpystrcatstrcmpstrlen函数以及模拟实现:字符串已'\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包含 '\0' )。参数指向的字符串必须要以 '\0' 结束。注意函数的返回值为size_t,是无符号的。#include <stdio.h>#include <string.h>in..
2021-03-03 03:14:07 271
原创 qsort库函数和模拟实现
模拟实现qsort库函数先看一下qsort数据原型void qsort( void *base,//待排序的数据起始位置 size_t num,//排序的元素个数 size_t width,排序的元素宽度 int (*cmp)(const void *e1, const void *e2 ) );//函数指针-待比较的两个元素的比较函数这里是qsort库函数的使用...
2021-02-26 00:58:55 2075 3
原创 递归的使用
递归的含义递归的使用目录递归的含义递归的使用递归是什么? 程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中被广泛使用。一个过程或函数在其定义或说明中有直接或者间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似规模较小的问题来求解,大大的减少的程序的代码量。下面是我在某个网站看到的例子:1. 假设你在一个电影院,你想知道自己坐在哪一排,但是前面人很多,你懒得去数了,于是你问前一排的人「你坐在哪一排?」,这样前面的人 (代号 A) ..
2020-12-31 01:07:40 212
C语言思维导图(详细)
2023-03-23
在本地克隆远程仓库失败
2022-12-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人