自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 《我把 std::bind 和引用塞进同一个句子后,编译器给了我 7 个错误——一份解剖级踩坑笔记》

想象这样一个日常场景:你写了一个函数,想让它“原地”改外面的数据,于是很自然地写成“引用传参”——结果——编译能过运行也“好像”能过但 a 就是 10,死活不加你:???(如果此刻你把断点打进去,会发现 add_one 里引用的那个 int,地址跟 main 里的 a 根本不是一个东西。

2025-12-02 17:21:21 785

原创 C++模板深度解析:从泛型编程到高级技巧

优势代码复用率提升90%+类型安全强于宏定义STL等基础库的构建基石缺陷代码膨胀(多个实例化版本)编译时间增加约30%-50%错误信息晦涩难懂(例如50行错误提示)

2025-03-14 12:29:19 601

原创 深入理解C/C++堆数据结构:从原理到实战

每个节点的值都满足特定顺序关系:完全二叉树的结构特性(除最后一层外都是满的,最后一层节点左对齐)这种数据结构由J.W.J. Williams在1964年提出,最初用于实现高效的堆排序算法。堆在计算机科学中的应用非常广泛,从操作系统内存管理到高级算法实现都有它的身影。

2025-03-12 13:17:33 918

原创 理解C/C++内存管理:从内存布局到智能指针全解析

程序员手动管理(malloc/new申请,free/delete释放)分为初始化段(.data)和未初始化段(.bss)内存连续分配,大小有限(通常2-10MB)类比:自助仓库,需自行登记领取和归还钥匙。存放字符串常量、const修饰的全局变量。存放全局变量、静态变量(static)删除器(deleter)自动管理资源。类比:自动售货机的商品格,先进后出。内存空间大(取决于系统可用内存)程序启动时分配,程序退出时释放。内存分配不连续,需要指针访问。执行构造函数(对于类对象)调用析构函数(对于类对象)

2025-03-10 12:39:23 375

原创 C++ unordered_map使用指南

int id;// 自定义哈希函数// 定义相等比较// 使用自定义键的unordered_map。

2025-03-09 20:54:36 1022

原创 Linux-进程概念

如是,在我们目前所见的计算机中,都是有一个个是硬件组成的,如:• 输⼊单元:包括键盘,⿏标,扫描仪,写板等• 中央处理器(CPU):含有运算器和控制器等• 输出单元:显⽰器,打印机等等我们通过QQ聊天来理解一下:值得注意的是:所有的设备只能直接和内存打交道,而CPU只能对内存进行读写,不能访问外设(除缓存)

2025-01-26 14:55:28 622 1

原创 c++新特性-智能指针

首先在我的上一篇讲异常的文章中说到,在throw抛出异常后,由最近匹配的catch捕获,catch之后的代码将不会被运行,而这里的catch可能是调用链上是最远的那一个。上面程序中我们可以看到,new了以后,我们也delete了,但是因为抛异常导,后卖面的delete没有得到执行,所以就内存泄漏了,所以我们需要new以后捕获异常,捕获到异常后delete内存,再把异常抛出,但是因为new本身也可能抛异常,连续的两个new和下面的Divide都可能会抛异常,让我们处理起来很麻烦。

2024-11-26 16:29:50 744

原创 c++新特性-异常

首先,不考虑玩具代码的情况下,在一直运行的代码中,只要某一处的数据错误,继续运行接下来的代码时,可能会导致程序奔溃。那么如果提前察觉该处的数据错误,在此处告诉程序员该处的数据错误,那么将会避免程序错误。

2024-11-25 20:31:42 977

原创 移动语义和右值引用

左值是⼀个表⽰数据的表达式(如变量名或解引⽤的指针),,左值可以出现赋值符号的左边,也可以出现在赋值符号右边。定义时const修饰符后的左值,不能给他赋值,但是可以取它的地址。右值也是⼀个表示数据的表达式,要么是字面值常量、要么是表达式求值过程中创建的临时对象等,• 值得⼀提的是,左值的英文简写为lvalue,右值的英文简写为rvalue。传统认为它们分别是leftvalue、right value 的缩写。现代C++中,lvalue 被解释为loactor value的缩写,可意为存储在内。

2024-11-05 12:18:13 886

原创 谈在map容器里的[ ]的理解

其中pair是我们理解 [ ] 作用的关键,而pair的介绍如下简单来说pair是一个具有两个模板参数的模板类,其中一个在内部重定义为Frist,一个为second,可用于返回两个数据时的参数。在map中还有一个作用是在insert插入时作形参类型。

2024-10-06 23:46:53 475

原创 c++迭代器失效问题

迭代器的主要作用就是让算法能够不用关心底层数据结构,其底层实际就是一个指针,或者是对指针进行了封装。我们通常通过迭代器来访问和修改数据。在删除pos位置的数据后,其之后的数据均会往前移动一位,此时pos指向原来位置的后一个数据,因为删除pos是最后一个数据,所以pos可能指向end位置,所以认为vector()在rease()后迭代器失效。迭代器失效解决办法:在使用前,对迭代器重新赋值即可。

2024-09-30 18:44:05 354

原创 排序-快速排序

方法思想:选定一个数(通常取最左边或者最右边的数,也用三书取中得到),将大于大于数放在左边,小于该数放在右边,从而使得该数放在排序的正确位置,再以此为分界线将数组分为左右两组排序,从而达到快速排序的结果图鉴:

2024-08-28 12:31:59 258

原创 谈c语言中当指针和数组等价的情况

在标准参考文献中说:作为函数定义的形式参数,char s[]和char* s是一样的,也就是说不管在函数定义参数列表中是指针还是数组形式,当传入一个数组时,编译器都会看成是指针。至于为啥ca和pa的地址相同,我想是由于编译器特殊处理的!

2024-08-28 12:31:31 218

原创 寻找带环链表的入口问题

又因为慢指针走到入口节点时需要走L步,所以此时慢指针位于入口节点的-L步,此时将快指针置于初始节点,并将步长改为1,同时移动快慢指针,则二者再次相遇时就是入口节点了。(n是指圈数,n >= 1).

2024-06-30 17:39:04 232 1

原创 归并排序-非递归实现

归并排序的核心思想在上一篇文章中讲过了已经,如有兴趣请看上一篇文章。在非递归的实现中我们通过循环来分组,在每组排序好后,重新给分组,再排。以八个元素为例,先两个为一组,在四个为一组,最后八个一组完成排序。发现,当end2越界,begain2,end2均越界,后面同理。而且越界后,在界内的有序,就不用在排序了,只需调整边界即可。

2024-06-12 12:25:39 209

原创 归并排序-递归实现

关于归并排序,我认为可以从合并两个有序数组出发,而我认为归并排序的实质也是这。而对于递归实现,无非是分而治之,以8个元素的数组为例,我们先完成两个两个之间的有序排,再完成四个之间的排序,最后完成8个之间的排序。而分的最小单位是一个元素,我们认为只有一个元素的数组是有序数组。此外还有一点是,我们借助新开辟的一块空间完成操作,在新开辟的空间内完成排序,再拷贝回原数组。

2024-06-11 23:40:06 343

原创 C语言实现贪吃蛇游戏

Windows这个多作业系统除了协调应⽤程序的执行、分配内存、管理资源之外,它同时也是⼀个很大的服务中心,调⽤这个服务中心的各种服务(每⼀种服务就是⼀个函数),可以帮应⽤程序达到开启 视窗、描绘图形、使⽤周边设备等⽬的,由于这些函数服务的对象是应⽤程序(Application),所以便 称之为ApplicationProgrammingInterface,简称API函数。WIN32API也就是MicrosoftWindows 32位平台的应⽤程序编程接口。

2024-05-05 21:27:44 817 2

原创 结构体的相关知识

众所周知,在C语言中有一种结构类型是数组,而数组是将同一类型的数据给存起来,但是我如果要将不同类型的数据给存在一起呢,如我要将一个同学的相关信息存储,那么就有姓名(char),性别(char),身高(int)。。。。。。这时在C语言中的自定义类型——结构体就派上用场了如图:以上便是结构体的申明,你学会了吗?

2024-03-26 23:43:47 382

原创 关于浮点数在内存中的储存

这意味着,如果E为8位,它的取值范围为0~255;对应的我们可以分别得到s,M,E,那么我们在内存中分别储存s,M,E即可将一个浮点数在内存中储存起来,接下来我们需要思考,S,M,E分别各需要多大内存储存呢?众所周知,float类型的大小是四个字节,S好说,只需要储存0/1,故只需要一个bit位,剩下的呢,对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M。对于32位的浮点数,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M。

2024-03-18 23:17:03 1002

原创 关于指针<1>

在平常口中说的指针都指的是指针变量,而指针实质指的是地址。理解指针的第一步就是理解地址,什么是地址?以32位环境来说,内存一共分为2*32个元区域,一个元区域的大小是8bit,也就是一个字节,每一个元区域都有自己的编号,从0x00000000到0xffffffff,而这个编号就是地址,也就是指针(地址以十六进制展现)。

2024-03-08 21:59:28 613 1

原创 浅聊一维数组传参的本质

在说一维数组传参本质之前我们需要了解指针的相关知识,指针即地址。我们知道在数组创建的过程中,编译器会向电脑申请一块连续的地址来存放相同类型的数据,如 int arr[20];就会在电脑内拥有大小为20*4字节的空间,可以存放20个整型类型的数。前面说编译器会向电脑申请一块连续的地址,如何直观的感受到,如图:地址是由十六进制表示,如图可以很清楚的看到地址的变化,那么,我们是不是只需知道一个数组的首地址,便可以找到该数组的每一个元素。

2024-03-02 19:11:25 494

原创 浅聊从零基础写一个代码游戏-扫雷(2)

我们开始想,扫雷游戏该如何去实现。我们知道,扫雷游戏的完成有系统的布置雷和玩家的寻找共同构成 ,而我们要做的便是完成系统的布置和对玩家的游戏过程的提示。如此说来,我们开始我们的编写吧!

2024-02-14 21:30:35 439 1

原创 浅聊从零基础写一个代码游戏-扫雷(1)

就作者个人认为所谓的函数就是一个功能的实现体,如:每一个程序都必须有一个主函数main,也只能有一个主函数,其功能就是用于程序主体的实现,连接每一个功能,或许你可以认为主函数就是一个程序的树干,连接着每一个树叶(功能)。定义方法:返回值类型 函数名字(形参列表)//函数体,函数的功能在函数体里实现很重要的一点,函数的调用必须在函数定义的后面。

2024-02-07 22:11:39 746 1

原创 初来乍到—第一篇博客文章

是这样,在一个机缘巧合之下,我加入了鹏哥C语言寒假集训营,也是第一次知道写博客的好处,便想着来此处提高自己,为以后埋一个伏笔。我是抱着考计算机二级去报的鹏哥的课,其中鹏哥说了一件让我醍醐灌顶的话,说:考的证再多,也不如自己有真本事。本人是兰州理工大学的一名普通学生,没有天赋能力,也没有殷实的家庭背景,但是是对未来充满憧憬的阳光男孩。本人自动化专业,学习C语言非专业所需(在校学长说的),但我个人感觉挺喜欢编程,便想着看能不能学习一下,一方面为了增加未来竞争力,一方面为了个人爱好。

2024-01-17 12:26:41 627

空空如也

空空如也

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

TA关注的人

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