自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++之模板初阶

重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数。如果类型不匹配,编译器会尝试进行隐式类型转换,如果无法转换成功编译器将会报错。3.只有一个,类型转换一下也可以用的,也可以匹配调用。使用模版,并没有让效率得到提高,只是让代码变得更简单,书写更加便利。1.在都有的情况下,优先匹配匹配普通函数+参数匹配。2.没有普通函数,优先匹配参数类型匹配的+函数模版。代码的可维护性比较低,一个出错可能所有的重载均出错。,对于字符类型也是如此。,对于模板函数的使用,

2024-05-03 22:45:37 438

原创 C/C++内存管理

目录一:C/C++内存分布二:C语言中动态内存管理方式:malloc/calloc/realloc/free三:C++内存管理方式3.1new/delete操作内置类型3.2new和delete操作自定义类型四:operator new与operator delete函数4.1operator new与operator delete函数五:new和delete的实现原理5.1内置类型5.2自定义类型六:定位new表达式(placement-new)三:C++内存管理方式C语言内存管理方式在C++中

2024-05-03 22:32:32 918

原创 C++之类和对象

其他成员既可以在初始化链表中初始化,也可以在函数体内构造。

2024-04-29 22:43:23 649

原创 日期类的实现,const成员

这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需。三:取地址及const取地址操作符重载。修饰类成员函数,实际修饰该成员函数。这两个默认成员函数一般不用重新定义。,编译器默认会生成。,表明在该成员函数中。

2024-04-28 22:03:22 552

原创 C++之运算符重载

如果写一个返回值为void的赋值重载函数也可以完成赋值,既然这样为什么返回值为什么是引用类型呢?注意:内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符重载完成赋值。一个全局的赋值运算符重载,就和编译器在类中生成的默认赋值运算符重载冲突了,故赋值。3.用于内置类型的运算符,其含义不能改变,例如:内置的整型+,不 能改变其含义。3.虽然引用返回可以减少一次拷贝构造,但是出了函数作用域,返回对象还在才能用引用。返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。

2024-04-28 21:34:16 922

原创 拷贝构造函数

默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝。

2024-04-10 20:28:38 333

原创 构造函数和析构函数

6.关于编译器生成的默认成员函数,很多童鞋会有疑惑:不实现构造函数的情况下,编译器会生成默认的构造函数。但是看起来默认构造函数又没什么用?d对象调用了编译器生成的默认构造函数,但是d对象_year/_month/_day,依旧是随机值。也就说在这里。

2024-04-06 21:24:43 820

原创 类的作用域及计算

3.做个比方,类实例化出对象就像现实中使用建筑设计图创建出房子,类就像设计图,只设计需要什么东西,实际上并没有实体的建筑存在,同样类也是一个设计,实例化出对象才能实际存储东西,占物理空间。缺陷:每个对象中的成员变量是不同的,但是调用的函数是相同的,如果按照这种此种方式存储,当一个类创建多个对象时,前面实例化时有讲到,对于函数变量的定义是开辟了空间给变量,如果空类的字节大小是0,那么下面的情况如何解释?如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整。

2024-04-05 18:16:36 1156

原创 C++之类

/类体:由成员函数和成员变量组成//注意后面的分号class是定义类的关键词,classname是类的名字,{}中为类的主体,注意类定义结束时后面的分号不能省略类体中内容被称为类的成员:类中的变量称为类的属性或者成员变量;类的函数称为类的方法或者成员函数3.1类的两种定义方式。

2024-04-04 21:27:21 962 6

原创 引用,内联函数,auto函数,指针nullptr

在早期C++/C语言中auto的含义是:使用auto修饰变量,是具有自动存储器的局部变量,但是遗憾的是一直没有人使用它。auto不再是一个储存类型的指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须是有编译器在编译时推导而得。注意:使用auto定义的变量必须对其初始化,在编译阶段需要根据初始化表达式来推导auot实际类型。因此auto并非是一种“类型”的声明,而是一个类型声明时的占位符,编译器在编译时会将auto替换为变量实际的类型。

2024-04-01 21:05:52 979

原创 函数重载和引用

分析为什么支持重载时,要有一个大前提,就是函数的定义要和声明分离,在不同的文件中,如果在同一个文件中,就可以直接拿到函数地址了,就不用通过函数名了。在讲解这个问题之前,我先说一下三个文件,编译链接的过程,详细过程,我在C语言专栏的编译链接里面有讲述,想了解更多的可以去看一下。在交换两个函数的时候,直接传值是不可以的,一般我们都要传地址,而在C++我们可以通过传别名来做。1.直接使用函数名找函数地址,不支持函数重载,如果函数名一样,不知道调用的函数是哪一个。,编译器不会为引用变量开辟内存空间,它和它的引用。

2024-03-29 20:45:57 676

原创 初步了解C++

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

2024-03-29 15:56:54 1465

原创 归并排序(C语言版)纯代码

【代码】归并排序(C语言版)纯代码。

2024-03-25 20:26:42 91

原创 排序大乱炖

直接插入排序,可以有很多种写法,写法也比较简单,在这里,我主要介绍一种和希尔排序十分相似的思想,方便后续讲解希尔排序在这里我们定义一个变量end,它用来记录下标,在这里我们认为[0,end]范围内的数组是有序的,然后将下标end+1所在的数组,与[0,end]范围内的数组比大小(所有排序讲解的均为升序),放在合适的位置。

2024-03-25 20:24:17 964

原创 BC134 蛇形矩阵

首先,这道题我们要根据这个示例,找到蛇形矩阵是怎么移动的这是,我们可以标记一下每次移动到方向我们根据上图可以看出,蛇形矩阵一共有两种方向,橙色的是斜向右上角,蓝色的是斜向左上角,根据这个图的最后一个的点(16),我们可以先补出一个红色三角形,再根据这个三角形,可以补充为一个矩形。而这个三角形中,经过最后一个数据16的是第七行,所以循环时最后的条件是小于等于7(2*n-1)

2024-03-09 21:05:15 261

原创 BC114 圣诞树

看n==3的时候,可以找到一些规律。

2024-03-09 18:16:52 111

原创 BC161 大吉大利,今晚吃鸡

【代码】BC161 大吉大利,今晚吃鸡。

2024-03-09 16:02:55 186

原创 预处理详解

C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的。__FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ASIC C,其值为1,否则未定义//ASIC C gcc编译器是支持的,但是VS不支持#define reg register //为register这个关键字,创建一个更简短的名字//for循环判断部分什么都不写,表示恒成立,死循环。

2024-03-09 12:29:04 1230

原创 汉诺塔问题(C语言)

汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。

2024-03-06 18:36:46 425

原创 猜数字游戏(C语言)

1.电脑自动生成1~100随机数字2.玩家猜数字,在猜数字过程中,根据猜数字的大小,根据猜数据的大小,给出大了还是小了的反馈,直到猜对游戏。

2024-03-06 16:23:00 1187

原创 贪吃蛇代码纯享版

【代码】贪吃蛇代码纯享版。

2024-03-02 22:31:44 216 1

原创 贪吃蛇(C语言)步骤讲解

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

2024-03-02 22:01:26 5327 5

原创 WY49 数对

1.首先,很容易想到的就是两个循环遍历,但是提交时第一个数据就是十分大,时间不允许2.这时,我们就不得不换一种思路,题目中有一个标签:基础数学,也就是这个题可以找数学规律。

2024-02-28 15:55:06 122

原创 面试题 16.15. 珠玑妙算

1.首先malloc开辟的数组,将其中的元素的值为零,方便之后的统计次数2.先统计猜中的,当猜中时,solution[i]==guess[i]时,为让防止之后统计之后伪猜中时重复的,要将值改变,为了避免和以已有值重复,就+ - 一就可以了,而且为了避免找伪猜中时有重复,这两个数组的变化不能一样,不然就会重复,所以一个加一,一个减一。

2024-02-27 23:39:29 213

原创 C语言题目讲解

先设定两个变量,一个变量(ret_e)用来存连续的1的个数,当nums[i]为0时,该变量就置为0,当nums【i】为1时,再重新++;再设另一个变量(ret),作为返回值,当ret-e++时,如果ret<ret_e就把ret_e里面的值赋给ret这样最后ret存的就是最大的连续的值。

2024-02-27 23:05:26 289

原创 力扣238和169

【代码】力扣238和169。

2024-02-20 21:30:15 409

原创 JZ65 不用加减乘除做加法(&,^)

【代码】JZ65 不用加减乘除做加法(&,^)

2024-02-20 21:19:36 210

原创 C语言:编译和链接

所以当我无法知道宏定义或者头文件是否包含正确的时候,可以查看预处理后的.i文件来确认,但比较遗憾的是,.i文件一般是作为临时文件的,最后会被系统直接删除,所以在文件夹中找不到,在VS这样的集成环境下是无法观察的,但在gcc下可以用命令观察到。比如:目标文件的格式elf,链接底层实现中的空间与地址分配,符号解析和重定位等,如果你有兴趣,可以看《程序的自我修养》⼀书来详细了解。将源代码程序被输入扫描器,扫描器的任务就是简单的进行词法分析,把代码中的字符分割成⼀系列的记号(关键字、标识符、字面量、特殊字符等)。

2024-01-15 23:35:16 937

原创 C语言内存函数

函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。如果source和destination有任何的重叠,复制的结果都是未定义的。memset是用来设置内存的,将内存中的值以字节为单位设置成想要的内容。memcpy函数的模拟实现:对于重叠的内存,交给memmove来处理。较从ptr1和ptr2指针指向的位置开始,向后的num个字节。三: memset 函数的使用。

2024-01-14 17:09:14 514

原创 文件操作详解

我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输入输出操作各不相同,为了方便程序员对各种设备进行方便的操作,我们抽象出了流的概念,我们可以把流 想象成流淌着字符的河。每个被使用的文件都在内存中开辟了⼀个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的保存,我们可以使用文件。

2024-01-14 15:34:45 1294

原创 动态内存管理

所以,如果我们把结构体的内存以及其成员要的内存⼀次性分配好了,并返回给用户⼀个结构体指针,用户做⼀次free就可以把所有的内存也给释放掉。当是情况2 的时候,原有空间之后没有足够多的空间时,扩展的方法是:在堆空间上另找⼀个合适大小的连续空间来使用(同时也会把旧空间的数据拷贝到新空间里,同时释放旧空间,返回新空间地址)。有时会我们发现过去申请的空间太小了,有时候我们又会觉得申请的空间过大了,那为了合理的时候内存,我们⼀定会对内存的大小做灵活的调整。分配方式类似于链表。但是对于空间的需求,不仅仅是上述的情况。

2024-01-13 22:16:55 873

原创 自定义类型:联合和枚举

上述的结构其实设计的很简单,用起来也方便,但是结构的设计中包含了所有礼品的各种属性,这样使得结构体的大小就会偏大,比较浪费内存。联合的成员是共用同⼀块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。在C语言中是可以的,但是在C++是行的,C++的类型检查比较严格。这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。第一个代码的三个地址都是一样的,第二个代码的输出,是将第四个字节的内容修改为55.

2024-01-13 20:46:34 949

原创 自定义类型:结构体

跟结构相比,位段可以达到同样的效果,并且可以很好的节省空间,但是有跨平台的问题存在。4.4位段使用的注意事项位段的几个成员共有同⼀个字节,这样有些成员的起始位置并不是某个字节的起始位置,那么这些位置处是没有地址的。内存中每个字节分配⼀个地址,一个字节内部的bit位是没有地址的。所以不能对位段的成员使用&操作符,这样就不能使用scanf直接给位段的成员输入值,只能是先入放在一个变量中,然后赋值给位段的成员。

2024-01-13 11:43:40 963

原创 C语言操作符详解与进制

目录一:操作符的分类二:二进制和进制转换2.1 2进制转10进制2.1.1 10进制转2进制数字2.2 2进制转8进制和16进制2.2.1 2进制转8进制2.2.2 2进制转16进制三: 原码、反码、补码四:移位操作符4.1左移操作符4.2 右移操作符五:位操作符:&、|、^、~六:单目操作符七:单目操作符八:下标访问[]、函数调用()8.1[ ] 下标引用操作符8.2函数调用操作符九:结构成员访问操作符9.1结构体9.1.1结构的声明9.1.2结构体变量的定义和初始化9.2结构成员访问操作符9.2.1结构

2024-01-12 22:00:38 1049

原创 数据在内存中的存储

整数的2进制表示方法有三种,即数据在内存中以二进制的形式储存。三种表示方法均有和两部分,符号位都是用0表示“正”,用1表示“负”,而数值位最高位的⼀位是被当做符号位,剩余的都是数值位。对于上述所说的三种表示方法,只适用于讨论。对于无符号位的整数来说,最高位如果1,则表示2^31,不是表示负数,无符号整数代表的数均为正数。负整数的三种表示方法各不相同。:直接将数值按照正负数的形式翻译成二进制得到的就是原码。:将原码的符号位不变,其他位依次按位取反就可以得到反码。:反码+1就得到补码。

2024-01-12 11:15:01 773

原创 初步认识指针

在了解内存和地址之前,我们想有个生活中的案例:有了,如果你的朋友得到房间号,就可以快速的找房间,找到你。生活中,每个房间有了房间号,就能提⾼效率,能快速的找到房间。如果把上面的例子对照到计算中,又是怎么样呢?我们知道计算上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的数据也会放回内存中,那我们买电脑的时候,电脑上内存是8GB/16GB/32GB等,那这些内存空间如何高效的管理呢?其实也是把内存划分为⼀个个的内存单元,每个内存单元的大小取1个字节。计算机中。

2024-01-10 18:43:10 892

原创 P5742 【深基7.例11】评等级

1.这道题如果直接定义一个结构体数组,数组大小太大,会导致堆溢出2.再细看题目的要求,要求我们写一个参数为结构体的函数3.如果直接写会导致堆溢出,我们可以用calloc在栈区开辟一块结构体大小的空间。

2023-12-29 11:59:26 386 1

原创 P5740最厉害的学生

这道题就是会使用C语言的结构体,然后知道结构体数组。

2023-12-25 17:31:08 388

原创 P3741honoka的键盘

1.这道题的关键是读懂题目,代码并不难,重点关注题目的这句话2.题目中所以后面的那句话,我们可以提取出两个信息:2.1.只有V和K相邻时才认为出现了VK,KV不可以2.2她可以改变一个字符,使VK出现的次数最多,我们可以改变的是:VV和KK3.代码设计:3.1先循环一遍,找出VK出现的次数3.2再将找到的VK换成其他字符,避免对下一次找VV和KK形成干扰3.3再循环一次找有咩有KK或者VV,有就将它们改成VK,记住只能改一次,改完就跳出循环。

2023-12-25 16:22:45 378

原创 P1957口算练习

1.因为这个题不确定是输入一个数据还是两个数据,如果根据数据类型分别输入数据,不容易计算,这是可以将输入的数据当作一个字符串,然后在判断首字符是不是字母即可2.用isalpha判断是不是字母,如果是字母,之后就在输入两个整形变量,如果不是字母,就用atoi将字符串的数字转换为数字,然后再输入一个数字3.怎么求字符串长度?我们可以用sprintf函数这个函数是不是很像printf,他的功能就是将一个数据转换成字符串,再用strlen求字符串的长度即可。

2023-12-25 15:35:52 336

空空如也

空空如也

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

TA关注的人

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