自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 用C/C++加Easyx实现俄罗斯方块游戏(爆肝4万字,完全免费)

想要完游戏么?自己动手吧!

2024-04-06 14:19:57 2588 6

原创 Linux学习笔记之文件下

同理在C语言中printf默认向标准输出打印文本,也就是说,如果我们先关闭fd为1的标准输出,在打开一个文件,此时该文件的fd就为1,printf就会向文件中打印文字。使用<也可以从文件中读取。这也说明了一个文件可以被多个文件指针指向,而文件内部采用引用计数的方式,每次关闭文件count减一,如果count为0就释放文件。此时需要注意的是,虽然字符被刷新到了磁盘,但文件的指针指向了结尾,如果想要读取内容,要让他回到开头。如下代码,关闭文件描述符为1的文件,即标准输出,打开新文件的fd就为1,结果如下。

2025-03-05 10:39:17 743

原创 Linux学习笔记之文件上

OS是软硬件资源的管理者,对上要提供良好的开发环境,对下要管理好硬件。实际上OS要管理好硬件,就是要做好对于数据的IO操作,从硬件读取数据,或者是向硬件写入数据。对于硬件来说,他会有许多,OS为了管理硬件,一定会先描述在组织,对下管理硬件资源。创建hardware_struct,里面有设备名称,硬件编号,以及函数指针等。其中的函数指针就是为了读写操作准备的。由此,当我们想要向硬件写入的时候,不必关注底层硬件设计,只需要使用write函数即可,剩下的交给硬件驱动。这就是Linux下的一切皆文件的实现方式。

2025-02-24 21:09:07 785

原创 Linux应用之构建命令行解释器(bash进程)

当我们登录服务器的时候,命令行解释器就会自动加载出来。接下来我们就。在命令行中输入指令来达到我们想要的目的。我们在命令行上输入的是一连串的字符串,那么bash首先要做的就是分析字符串。然后判断是否合法字符串。如果是合法字符串,那么就创建一个子进程,让子进程去切换执行命令,bash分析子进程结果。如果是非法字符串,那么就再次循环,整体嵌套在一个while循环里面。如此循环下去。

2025-02-19 15:28:34 981

原创 Linux学习笔记之进程切换

常见的进程退出就是程序正常运行,程序退出码为return返回的值。

2025-02-19 12:28:28 852

原创 Linux学习笔记之虚拟地址空间

如果没有虚拟地址空间,多个进程在内存运行,那么每个进程申请的空间必定是七零八落的,东一块,西一块,管理起来十分的麻烦。但是经过虚拟地址空间之后,整个进程的空间布局变得明朗起来,分为栈区,堆区,静态区等,有利于学习与管理。一个地址我们如何判断他在那个内存分区,一种方法是根据代码分析,malloc申请的在堆区,数组在栈区,还有一种方式就是打印堆区和栈区的变量地址,一般而言两者相差会十分大,看地址和那个更加接近,就处在那个区域。在c语言中常常会涉及到如下内存概念,堆区,栈区,代码区,常量区等。

2025-02-17 21:30:27 638

原创 Linux学习笔记之环境变量

main函数有参数么?大家在日常使用中最常见的是如下形式吧。main函数返回值为int,不写参数,实际上main函数也可以加上参数。如下代码。他的第一个参数表示命令行解析指令个数,第二个表示指令数组。在Linux运行如下代码可得到如图。可以发现其实命令行就是以空格为分隔符识别指令的,argv就是字符数组指向对应选项。除了上述写法外还有一种方式,Linux规定argc最后一个元素必须以NULL结尾,这就可以写出如下代码。两种方式效果是一模一样的。

2025-02-17 12:04:50 592

原创 Linux学习笔记之深入理解进程调度

在写这篇文章之前向大家推荐一个视频,对于进程有很大的帮助,作者通过动画的方式生动地展示了进程的切换。【进程–计算机科学最成功的理念】 https://www.bilibili.com/video/BV1kaynYmExy/?

2025-02-15 14:18:52 627

原创 Linux学习笔记之进程

进程就是运行的程序,在Linux中被描述为task_struct结构体,用单链表进行管理。可以通过XShell来访问服务器.命令来查看进程,如下图。

2025-02-13 18:28:11 897

原创 AVL树超详解下

在上一篇博客中,我们提到了AVL树的创建销毁,核心是插入数据,(不了解的可以先看这篇博客)这次我们来看AVL树的另一核心功能删除,有了插入,我们一定也会有对数据删除的操作,接下来让我们遨游在AVL的深海中吧。首先明确一个概念,在二叉树中,祖先结点是指从根节点到给定节点所经过的分支上的所有节点。例如下图的祖先9的祖先为1 3 6。

2025-01-18 10:07:59 703

原创 Linux学习笔记之操作系统

操作系统实际是就是一个管理软硬件资源的程序,向下而言管理底层硬件,向上而言提供方便使用的接口。

2025-01-17 22:31:48 654

原创 linux学习笔记之冯诺伊曼结构

冯诺伊曼体系由数学家冯·诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯·诺依曼体系结构。冯诺伊曼体系是现代计算机的核心,没有他或许就没有我们现在使用的电脑,或者说计算机过于昂贵而支付不起。

2025-01-17 19:48:48 307

原创 Linux基础指令上

ls是list directory contents,即列出文件列表,他有十分多的选项,我们只需要掌握几个常用的即可,其余的在使用的时候查询帮助手册即可。这个指令是列出当前目录下文件的信息,可以直接使用,也可以加带选项,直接使用效果如下,显示当前目录下的文件。类似于windows中查看-平铺的效果。

2024-11-17 17:18:29 678 1

原创 C++ 11---lambda表达式与包装器

std::bind函数定义在头文件中,是一个函数模板,它就像一个函数包装器(适配器),接受一个可 调用对象(callable object),生成一个新的可调用对象来“适应”原对象的参数列表。相较于类而言,lambda表达式更加的简洁,明了。因此可以说lambda表达式就是经过特殊处理的函数对象,对象名在运行时由编译器决定,可以使用auto推出,函数使用与仿函数一样,都是调用重载的()函数。于是就引入了适配器的概念,我们不关心你是通过函数还是对象实现的,只关注你要什么参数,返回值是什么,统一模板。

2024-08-21 16:56:35 940

原创 C++ 左值引用与右值引用超详解

左值一般为我们自己定义的变量,在定义时开辟了内存,我们可以对这块内存赋值,修改内存中的值,如果有const也仅从语法层面上不允许修改,这块内存在其生命周期结束的时候销毁。右值一般为临时变量,是程序运行时产生的中间产物,他不是我们用户自己定义开辟空间的,是由编译器帮我们开辟空间,并且在用完就立即销毁。右值的生命周期一般只在当前语句,当我们要对右值进行赋值时,他已经释放空间了,此时我们再进行访问就是野访问,(与野指针一样造成内存问题),所以我们不能对右值进行修改,编译器强制语法检查,遇到修改操作就报错。

2024-08-18 18:21:02 3907

原创 布隆过滤器--极致的速度

布隆过滤器与位图类似,都是对比特位进行操作,不同的是位图只对一个位置标记,但布隆过滤器可以有多个哈希函数,对多个位置标记。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。如下图所示,当我们插入一个数的时候,把多个位置标记位1当我们判断当前元素在不在时,就可以依次判断是否为1即可,假如3个位置有一个为0,那么该元素一定不在,假如3个位置都为1,那么我们不能确定该元素一定在,只能时可能在。

2024-08-17 15:42:12 675

原创 位图(bitset)--明确场景极致性能

位图实际上就是运用哈希的思想将内存极致的利用,尽可能地提升效率。下面我们来看到面试题。给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在 这40亿个数中。【腾讯】首先想到的就是将这40亿个数进行排序,然后进行二分查找,快速排序时间复杂度为O(NlogN),二分查找一次为O(logN)。这种方法在时间复杂度层面还是不错的,但空间复杂度相对来说是比较高的,下面我们来计算下上述算法需要多少内存。

2024-08-14 15:02:44 860

原创 C++ 哈希底层原理

哈希是一种建立映射的思想,我们尝试用的数据结构是哈希表 ,又称「散列表」,其通过建立键 key 与值 value 之间的映射,实现高效的元素查询。具 体而言,我们向哈希表输入一个键 key ,则可以在 𝑂(1) 时间内获取对应的值 value。早期的C++的STL中没有hash表,在C++11中,STL又提供了4个 unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是 其底层结构不同。其中unordered_set就是一种哈希表。关于C++函数的查询可以点击下面链接。

2024-08-12 18:50:40 815

原创 AVL树超详解上

数学家G.M.Adelson-Velskii 和E.M.Landis发明了AVL树,来了解他吧!

2024-07-22 15:43:06 722 1

原创 二叉搜索树详解

二叉搜索树(Binary Search Tree)顾名思义是一种特殊的二叉树,主要用于查找与去重,与我们常见的二叉树不同,他对于结点的值有特殊的要求,二叉搜索树的定义如下主要有以下3点。这里我们的33大于15,在15的右子树上面,仿佛没有错,但是我们以30为父节点来看,33大于30,却出现在30的左子树上面,这是错误的!删除只有一个孩子的结点相对来说还是比较简单的,我们要找到要删除节点的父亲结点,并判断是父亲节点的左边还是右边,子节点的左边还是右边,最后链接起来就可以了。修改如下图后结果就是正确的了。

2024-07-19 14:45:09 1036

原创 C++继承保姆级讲解下

在上一篇文章,我们讲到了继承的概念,作用域与友元函数的关系,接下来我们来继续深入学习继承的知识,如果文章有错误,欢迎在评论区指出!接下来我们来看一个重点,派生类的默认成员函数!

2024-07-12 18:31:37 923 1

原创 C++继承保姆级讲解上

对于继承后的访问权限是什么,我们可以简单的理解为,权限趋向于缩小的,权限的大小为public >protected>private,而在子类中的访问权限是MIN(继承方式,父类访问权限)。对于基类的private成员在子类中不可见,这一点要记住。此时再看这张图是不是就十分容易记住了。还有一个细节是,继承时使用关键字class时默认的继承方式是private,使用struct时默认的继承方式是public,虽然有默认情况,大家最好还是显示的写出来。继承就类似于拷贝了父类一份代码到子类里面。

2024-07-11 16:17:20 693

原创 解放双手 免费AI编程工具---Fitten Code

到这里Fitten Code的主要功能已经介绍完毕了,还有一些功能大家可以自行扩展学习。通过使用AI工具,我认为未来程序员这个工作不会消失,可能会减少岗位。AI带来的不仅是计算机行业的冲击,还是各个职业的冲击。或许未来专门的程序员会减少,转而向各个产业转移,实现数字化转型。

2024-06-16 11:49:16 1386 1

原创 C++类和对象下——实现日期类

到这里本篇文章就结束了。喜欢的点点关注!全部代码如下。if (&d!= this)//友元函数声明//比较函数=(Date& d);//加减操作函数private:int _year;int _month;int _day;

2024-05-13 23:05:03 1066 2

原创 C++类和对象 中(六大默认成员函数)

紧接着上一篇文章,接下来我们来认识下类的六大默认成员函数,如下图。之所以叫他默认成员函数,是因为即使我们不写,编译器会默认帮我们写,但只要我们自己显示的写了,编译器就不会帮我们生成对应的成员函数。类似于我们脱贫后就不会再有低保一样。接下来我们一个一个接着看吧!构造函数给人一种开辟空间的感觉,但其实它的作用是初始化而不是开辟空间。我们可以把它当作一个特殊的函数,他的语法如下。1.要求函数名要和类名相同2.没有返回值3.对象实例化的时候编译器自动调用4.可以重载。

2024-04-18 22:14:31 698 1

原创 C++ 类和对象 上

今天我们来进入C++类和对象的学习。相信大家一定听说过C语言是面向过程的语言,而C++是面向对象的语言?那么他们有什么却别呢?又怎么体现呢?这就与我们今天要说的类和对象脱不了关系了。面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。面向过程(Procedure Oriented)是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程。

2024-04-12 23:34:35 673

原创 从C到C++过渡知识 下(深入理解引用与指针的关系)

引用时C++引入的一个新的概念,他和指针有着千丝万缕的关系。首先我们要了解的是引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空 间,它和它引用的变量共用同一块内存空间。语法格式如下与指针十分的相似,&是b为引用的标志,int为引用对象的类型,所以int& b =a;表明b是变量a的引用。那这有什么用呢?下面我们看段代码。这段代码的运行结果是什么呢?结果如下。

2024-04-02 23:24:36 652 1

原创 从C到C++过渡知识 中(为什么C++支持函数重载,而C不支持函数重载)

当我们调用Add函数的时候,由于b参数我们给了他一个初始值,我们便可以调用Add函数时只给她传递一个参数,那么b参数的值就是10,所以打印14.但如果我们传入两个参数,4,5那么b的值就为5,打印9.缺省参数的使用简化了我们记忆代码的负担,弥补了重载函数的一些不足。我们人的思维是直接的,交换两个数直接就是交换两数,而没考虑类型,但在C中因为传递的参数不同,就必须要设置为两个不同的函数。首先便是预处理,在这个阶段的核心任务是将头文件展开,注释的删除,预处理指令,刚开始的时候不同的.cpp文件是分开处理的。

2024-03-31 18:46:12 1044 3

原创 从C到C++过渡知识上

C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的 程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机 界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言 应运而生。1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一 种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。

2024-03-30 17:24:18 794 1

原创 C/C++语言实现图形化排序计算器

在C语言的学习中,一直面对黑色命令框一定十分令人乏味。本次我将带领大家使用easyx实现图形化排序计算器,我使用的版本是VS2022+EasyX_2023大暑版。不同版本可能细节上处理不同,大家记得修改,否则不能成功运行。到这里我们的项目算是做完了,整个写下来也是十分的不容易。采用不断封装的方式,我们最终的主函数代码如下int main()ST a;//以结构体维护系统//欢迎界面Welcome();//初始化init(&a);//跟踪鼠标//获取点击信息Get(&a);

2024-03-18 22:56:53 2033 5

原创 C语言 &&与 || 混合复杂问题

相信你在c语言中一定遇到过像下面一样复杂的表达式判断。他的结果中为什么会输出Hello!?为什么b,c的值没有改变?相信你读完这篇文章便可以直到原因。

2023-12-26 20:23:57 1372 2

原创 c语言循环结构基础知识总结

相信大家在学习一段时间的c语言后,便会了解到c语言有3大基本结构,分别是选择结构,循环结构,顺序结构,而我们今天谈论的重点便是循环结构,下面让我们一起复习学习吧。

2023-12-22 22:59:00 500

原创 if 语句中关于0判断的三个细节问题

布尔值bool,是一种常见的计算机概念,他只有两个值,true和flase,一般在计算机中规定true值为1,flase值为0。但在早期的c89,c90语言版本中却没有给出bool类型,在最新的c99中给出了_bool类型,包含在stdbool.h头文件中。我们可以输出它们的值观察。我们可以观察他的定义然后我们看几段代码。

2023-12-21 20:42:29 1250 1

原创 用c语言解决约瑟夫环问题

约瑟夫环是一种经典的益智问题,一个圈共有N个人(N为不确定的数字),第一个人的编号为0或者1(两个都可以,看你的程序如何编写),假设这边我将第一个人的编号设置为1号,那么第二个人的编号就为2号,第三个人的编号就为3号,第N个人的编号就为N号,现在提供一个数字M,第一个人开始从1报数,第二个人报的数就是2,依次类推,报到M这个数字的人出局,紧接着从出局的这个人的下一个人重新开始从1报数,和上面过程类似,报到M的人出局,直到N个人全部出局,请问,这个出局的顺序是什么?

2023-12-16 22:29:39 2463 3

原创 C语言scanf函数详解

首先我们看一下scanf的声明,intscanf我们可以由此得出scanf的返回值是整型,形参是指针即地址。下面我们看一段代码。如果运行这段代码,他会报错。这是新手十分容易出错的地方,scanf("%d",a)中a是变量不是地址,所以会报错。改也十分简单,只要加上&(取地址操作符)便可以。

2023-11-28 17:43:55 1533 1

原创 用C求1到n的素数(质数)

这是最直接的算法,不过我们在仔细想一想,偶数有没有可能是质数。当偶数是2时,显然他只有1,2两个因数是质数,但当偶数大于二时,他是不是一定是2的倍数,即这个偶数一定有因数2,由此我们便可以再将代码优化些。首先我们了解下素数的定义。一个整数的因数只有1和它本身的数称之为素数,又名质数。例如6的因数有1,2,3,6,那么6不是素数,3的因数只有1,3那么3是质数。要解决这个问题的关键是找到n的因数,我们可以用循环遍历来解决。例如3/1=3,3/2=1.5,3/3=1。那么1,3是他的因数,所以3是质数。

2023-10-23 20:40:51 1109 1

原创 用C语言找完数

首先我们了解下完数的定义,如果一个数恰好等于除去他本身的因子之和,则称该数为"完全数",例如6的因数有1,2,3,6。6=1+2+3,所以6是完数。解决这个问题的关键是找出一个数全部的因数,这里只举出一种方法,感兴趣的可以看往期找因数。

2023-10-22 22:47:01 1382 1

原创 用C语言实现求一个整数的全部因数

首先我们来认识下因数的定义,整数a除以整数b(b≠0)的商正好是整数而没有余数,我们就说b是a的因数。例如6=2*3,那么6/2=3,6/3=2,就可以称2,3是6的因数。接下来我们进入正题,用c求因数。

2023-10-22 15:51:31 4511 2

排序计算器.zip,具体可看博客

全部源码以及资源

2024-06-16

俄罗斯方块游戏源码+图片,感兴趣看我博客

俄罗斯方块游戏源码+图片,感兴趣看我博客

2024-04-06

空空如也

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

TA关注的人

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