自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++之 【模板初阶(函数模板与类模板)】

类模板是一个与具体数据类型无关的通用类定义具体来说就是,类模板代表了一个类家族该类模板中的类型被参数化,编译器根据实参类型产生类的特定类型版本。

2025-03-22 15:13:00 939

原创 C/C++内存管理

(1)对于单个对象空间的开辟与释放,delete p2;new 类名-即可完成空间的开辟,再创建指针变量接收该空间的地址就好想要在开辟空间的同时进行初始化类名后面加上 (初始值,..)即可注意此处传参实际上是传给构造函数,传参的实际情况根据构造函数而定delete 指针名-即可完成空间的释放(1)申请和释放多个对象,new 类名[size]-即可完成连续空间的开辟,再创建指针变量接收该空间的地址就好想要在开辟空间的同时进行可以全部对象都进行初始化,也可以部分对象进行初始化。

2025-03-21 17:30:49 552

原创 C++类和对象之 【日期类的实现】(.h文件中声明,.cpp文件中定义)

(1)重载+, 会创建两个临时对象,所以我们选择在 重载+ 时去复用+=(1)默认大日期、默认小日期,用max、min替换(使代码更简洁)(1)创建一个数组存放每一个月的天数,判断闰年返回即可。(1)因为大小比较时,日期对象不会发生改变,加上。只需写一个判断小于的函数和一个判断等于的函数。(1)先判断是否是2月,在判断是否是闰年,调用任意一个运算符都会进行对象的创建,代码。(2)临时对象的创建,注意返回值类型即可。(1)this指针在函数体中的使用。(1)为了连续的输入输出,需要。

2025-03-19 17:28:27 564

原创 C++类和对象(下) 之 【初始化列表、explicit关键字、static成员、友元、内部类、临时对象】

声明为static的类成员称为类的静态成员用static修饰的成员变量,称之为静态成员变量,静态成员变量一定要在类外进行初始化用static修饰的 成员函数,称之为静态成员函数在C++中,友元(friend)是一种机制它允许一个类或函数访问另一个类的私有(private)和保护(protected)成员。友元不是类的成员函数,但它可以像类的成员函数一样访问类的私有和保护成员。友元关系打破了类的封装性,因此在使用时需要谨慎----文心一言友元分为友元类和友元函数创建一个对象,该对象没有名字,形如。

2025-03-18 17:06:50 888

原创 C++类和对象(中) 之 【运算符重载、赋值运算符重载、前置++与后置++、const成员、取地址及const取地址操作符重载】

时,往往会遇到。

2025-03-14 19:38:31 777

原创 C++类和对象(中) 之 【构造函数、析构函数、拷贝构造函数】

用户有定义构造函数之后编译器当然要选择不再生成构造函数,不然当编译器自动生成的无参构造函数与用户显式定义的无参或全缺省函数冲突时,编译器该调用哪个构造函数呢?(1)析构函数不能被重载,这是因为它没有参数且无返回值(1)如果一个类中有多个析构函数,可能会导致同一块内存被多次释放、编译器无法确定该调用哪一个析构函数等未定义行为class Timepublic:Time()_hour = 14;

2025-03-11 15:07:48 785

原创 C++类和对象(上) 之 【封装与类的语法特点、定义、访问限定符、对象模型与this指针】

C语言中,定义一个自定义类型需要用到关键字structC++兼容C语言,定义一个自定义类型也可以用 struct但C++更喜欢用class来替代class 类型名//类体(1)如上,就定义了一个类(1)class是定义类的关键字(1)注意结尾的分号类体中的内容叫作类中的变量叫作类的属性或成员变量类中的函数叫作类的方法或成员函数成员函数在类中定义,可能会被编译器当作内联函数进行处理2.声明放在.h文件中,定义放在.cpp文件中,注意:在.cpp文件中定义的函数需要在函数名前加上。

2025-03-07 20:11:50 639

原创 C++入门 之 【内联函数、C++11中的auto、基于范围的for循环与指针空值 nullptr】

因为被编译器视为内联函数的函数体会被直接展开编译器在编译阶段将该函数体展开而。

2025-03-04 15:02:40 423

原创 C++入门 之 【缺省参数、函数重载、引用】

这是规定因为形参的缺省值如果同时出现在了定义与声明中并且两处缺省值不同编译器则无法确认谁才是真正的缺省值,所以为了简化问题起见,直接规定缺省参数不能在定义和声明同时出现, 就会省事很多引用变量的定义: 类型& 引用变量名 = 引用实体int a = 10;int& b = a;第二行代码就定义了一个引用变量b,此时的b就是a的别名(引用)a、b共同代表了10定义一个引用变量时,类型& 引用变量名 = 引用实体类型和引用实体的类型必须保持一致,否则会报错,会丢失数据等。

2025-03-03 19:16:35 541

原创 数据结构 之 【带头双向循环链表的C语言实现】(附顺序表与链表的区别)

方便后续只改这一处就可以改变链表中存储数据的类型(3)我们所实现的。

2025-02-28 20:39:31 1061

原创 数据结构 之 【无头单向非循环链表】(C语言实现)

数据类型 的名称方便后续只改这一处,就可以实现数据类型的改变(2)定义节点,并简化名称(3)

2025-02-25 18:03:35 732

原创 数据结构之【链表简介】

上一期我们了解到,在中,(1)的,时间复杂度为(2)申请空间时,如果原数据量较大,较高(拷贝数据,释放空间……)(3)扩容一般是呈2倍的增长,难免造成原来200个存储单元,扩容至400个如果只用205个,那浪费就很大了就可以很好的解决上述问题。

2025-02-25 15:25:06 397

原创 数据结构 之 【顺序表实现】(c语言实现)

数据结构之【顺序表简介】

2025-02-21 19:58:31 699

原创 数据结构之【顺序表简介】

开100个单元存不下101个数据开1万个单元存不下1万零1个数据开10万个单元如果只存10个数据,又会浪费空间所以我们更多的选择使用。

2025-02-21 18:54:47 376

原创 #define,源文件与头文件,赋值表达式

是预处理阶段(在编译之前)由预处理器处理的。

2025-02-02 16:14:24 512

原创 sizeof和strlen的对比,\0与0,数组元素的默认值,函数参数的传递顺序,格式控制说明符,字符串的输入输出,变长数组与gets函数

是一种注意事项:(1)sizeof返回的值类型是size_t,这是一个无符号整数类型格式控制符为: %zu(2)sizeof中的表达式并不会计算如上图:如果计算,c应该等于1才对虽然a、b都是int型,占4个字节但最终是赋值给c,c是short型,只占2个字节所以sizeof计算的是short类型的大小(2.1)不计算的原因:(2.1.1)sizeof在编译时进行计算,而不是在运行时,而不是实际去计算表达式的值。(2.1.2)这种设计避免了运算,可以提高程序的效率。

2025-01-31 19:46:41 1277

原创 使用冒泡排序模拟实现qsort函数

当p1指向的内容大于p2时,函数返回 大于0的值。当p1指向的内容小于p2时,函数返回 大于0的值。避免代码冗余,创建一个Swap函数进行数据的交换。被调用的函数就是用来实现任意数据的比较方式的。当cmp函数返回值>0时,才进行后续的操作。当p1指向的内容等于p2时,函数返回 0。qsort函数可以实现任意数据的排序。(1.4)函数传参传进了width,注定了该算法不能实现其他数据的比较。两个元素的第一个字节、元素的大小。(1)我们并不知道元素的类型。(2)此时,传入的参数应该是。

2025-01-30 18:00:15 1279

原创 指针的介绍4【回调函数、qsort函数的运用】

I参数因为不知道要传入的是什么类型的指针,所以统一使用 void* 来接收从左往右,要传入的第一个参数是待排序数组的第一个元素的地址第二个参数是元素个数第三个参数是每个元素的大小,单位是字节第四个参数是一个函数指针qsort函数通过这个函数指针调用相关的函数qsort函数要调用的函数是程序员自己写的因为不同的类型有不同的比较方式字符串、结构体的排序不能粗暴的使用< >!= ==进行比较整型、浮点型的排序可以程序员自己写的函数就是实现数据比较方式的函数。

2025-01-30 16:01:26 869

原创 异或寻找单身狗

如下:5 & 6 = 33的二进制位中最右边一位为1此时1、1、3、3、5为一组,二进制位最右边一位为12、2、4、4、6为一组,二进制位最右边一位为0再用0与这一组异或,就可以得到5和6啦!

2025-01-30 01:15:00 276

原创 指针的介绍3后

即,p 指向了一个 void (*) (int a, int b) 型的函数。函数名为 p ,形参为(int a, int b), 返回值为 void*void(*p)(int a, int b) 如果去掉第一个括号,变为。学习完整型指针变量,字符指针变量,数组指针变量之后,我们不难推出。但注意*p要用()括起来,不然p会先于第二个()结合。(*p)(3, 5)有解引用的书写 便于理解。*p就拿到了函数, *p == test。p(3, 5)无解引用的书写 简化符号。p拿到了函数test的地址。

2025-01-29 20:14:38 991

原创 指针的介绍3前

上面的代码中,我创建了arr 来一个此时,我创建一个指针变量对这个字符串进行相应的此时,p指向的是字符串首元素,即字符'a'但值得注意的是:这是一个(1)定义:常量字符串(Constant String)是指存储在程序内存中的一段的字符序列(2)形式:常量字符串通常使用双引号("")括起来,并自动在末尾添加一个空字符('\0')作为字符串的结束标志这是因为,上段代码的语法并未发生错误,只是规则不允许,导致程序崩溃。

2025-01-29 15:51:57 885

原创 指针的介绍2后

我们知道,字符数组是一个数组,它里面存放着字符整型数组是一个数组,它里面存放着整型所以指针数组是一个数组,它里面存放着指针当然,二级指针也可以被存放。

2025-01-27 15:29:09 323

原创 指针的介绍2前

观察得到,数组名就是数组首元素的地址但有2个例外:1.如果在这段代码中,arr还是数组首元素的地址的话那么打印结果就应该是或但打印结果是注意到数组一共有 9 个的元素数组的大小正好是个字节2.上面的代码示意图如下:&arr[0] 、arr、&arr 拿到的地址相同进行+1操作之后,4指针类型相同&arr 跳过 36 个字节,即跳过了一个数组总结:(1),sizeof中单独放数组名,这⾥的,计算的是整个数组的⼤⼩, 单位是字节(2),这⾥的。

2025-01-27 12:29:57 1004

原创 指针的介绍1前

(1)计算机的时候,需要的数据就是的,处理之后的数据又当中(1)被分为一个个每个内存单元都有相应的编号,就像一幢楼不同房间的门牌号不同一样这样的CPU与内存之间就是靠着内存单元编号来找到相应的数据的计算机中常见的单位(2)一个比特位可以存储一个二进制的0或者1(4)相当于生活中的门牌号,也就是某个。所以内存单元编号 == 地址 == 指针。

2025-01-26 12:07:58 1420

原创 指针的介绍1后

通过指针加减整数跳过相应的字节就可以访问相应的数组元素等。

2025-01-26 12:06:00 936

原创 【数据结构】时间复杂度&&空间复杂度

衡量一个算法的好坏,一般从两个维度进行衡量,即时间复杂度和空间复杂度时间复杂度主要衡量一个算法的。

2025-01-25 09:19:58 1364

原创 柔性数组与c/c++程序中内存区域的划分

(1)第一种方法是在堆区开辟一块连续的内存,使用一次malloc和free即可struct Dint a;(2)第二种方法不一定连续,需要使用两次malloc和freestruct Dint a;int *arry;相比之下,方法1具有两个好处:(1)方便内存释放:一次free即可(2)有利于访问速度:连续的内存访问速度更快。

2025-01-24 15:33:27 804

原创 C语言之动态内存管理

上述内存开辟的特点:(1)(2)显然,当大小被固定的时候,或多或少都存在着空间大小不足或者浪费的情况C语言引入了动态内存开辟,让程序员,就非常灵活了。

2025-01-23 19:08:44 1406

原创 移位操作符 与 位操作符

, 叫作按位与位,指的是整数在内存中以补码形式存储时的二进制位|, 叫作按位或位,指的是整数在内存中以补码形式存储时的二进制位^, 叫作按位异或位,指的是整数在内存中以补码形式存储时的二进制位~, 叫作按位取反位,指的是整数在内存中以补码形式存储时的二进制位。

2025-01-20 01:45:00 1995

原创 递归实现青蛙跳台阶问题与汉诺塔问题

一只青蛙一次可以跳1到2阶台阶,问,青蛙跳到第n阶台阶时,有几种跳法?跳到第阶台阶时, 有种跳法跳到第阶台阶时, 有种跳法跳到第n阶台阶时,从第n-1阶台阶跳1阶台阶到达第n阶台阶,这是方法1从第n-2阶台阶跳2阶台阶到达第n阶台阶,这是方法2所以值得注意的是从第阶台阶连续跳两次,每次跳1阶台阶到达第阶台阶,这种方法‘3’实际上是方法1的重复因为方法‘3’是从第n-2阶台阶到第n-1阶台阶,再从第n-1阶台阶跳到第n阶台阶的。

2025-01-19 14:58:42 489

原创 函数递归的介绍

在语言中,递归就是函数自己调用自己上面的代码就是 main 函数在函数主体内 自己调用自己但是,上面的代码存在问题:main 函数反复地 自己调用自己 ,不受限制,停不下来。最终形成死递归,导致。

2025-01-19 12:49:13 1430

原创 二分查找的介绍

二分查找效率确实高,但它只适用于有序的数组。

2025-01-13 10:38:51 595

原创 进制转换 与 原码反码补码

了解不同进制,需要了解它各个数位的权重以及数位上数字的范围(1)针对于整数的2进制表示方法,有原码、反码、补码的说法(2)有符号整数的三种表示方法由符号位与数值位两部分组成,最高位的1位为符号位,其余的就是数值位符号位上0表示正数,1表示负数(2)无符号整数没有符号位,只能表示正数和0,由于缺乏符号位,所以不需要区分原码反码补码无符号整数的二进制表示就是其真实的数值表示(3)正整数的原码反码补码相同,负整数各不相同原码。

2025-01-12 11:14:45 1017

原创 C语言之assert断言

在头文件之前定义该 NDEBUG 宏。这样,编译器在预处理时就会忽略所有的 assert语句。

2025-01-11 16:48:43 412

原创 c++入门之 命名空间与输入输出

命名空间可以用来避免命名冲突命名空间形如:关键字 加 空间名称 + { 主体 }​命名空间可以定义函数/变量/类型​命名空间可以嵌套......一个命名空间就定义了一个作用域在一个项目中,可以存在多个相同名称的命名空间,编译运行后,分散的变量/类型/函数,共同局限在一个作用域里面。

2025-01-10 23:12:02 896

原创 文件的介绍4

feof 判断的是 文件指针是否到了文件末尾ferror 判断的是 文件读写是否发生了错误。

2025-01-08 21:04:54 789

原创 数组模拟实现 约瑟夫问题

约瑟夫问题的一般形式是:N个人(或更一般地,对象)围成一圈,从某个人开始报数,每报到第M个人,该人就必须离开圈子,接着从下一个人重新开始报数,这个过程一直持续到只剩下一个人为止。

2024-12-25 17:42:28 893

原创 文件的介绍3

sprintf:返回写入到缓冲区中的字符串的长度(不包括\0),通常不用于错误处理。printf:返回成功写入的字符总数(不包括终止的空字符),在极少数情况下可能返回负值表示错误。fprintf:返回成功输出的字符数(不包括终止的空字符),在发生错误时返回负值。scanffscanf和sscanf的返回值都表示成功读取并赋值的输入项的数量。返回值为正整数时表示成功读取了相应数量的输入项。返回值为0时表示没有读取到任何数据或输入不匹配。scanf和fscanf在输入流结束时可能返回EOF,而。

2024-12-23 17:05:24 980

原创 文件的介绍2

编写程序的时候,我们可以通过各种设备(如键盘、U盘等)获得数据,当然我们也可以通过各种设备输出相应的数据到它们当中去,可程序与设备进行了怎样的操作才实现了数据的输入输出呢?显然,这里面的水太深了!一 一弄懂将会花费许多精力,所以 为了方便对各种设备的操作, 我们抽象出“流”的概念。流, 可以理解为程序 与 各种设备之间的 纽带 ,通过这条纽带,程序与各种设备之间联系紧密, “程序的话设备听得懂,设备的话程序听得懂”, 即。

2024-12-22 14:38:18 1456

原创 文件操作的介绍1

磁盘(硬盘)上的文件就是文件,按文件功能可将文件分为:程序文件、数据文件。

2024-12-19 10:23:22 410

恶搞源程序,小小的整蛊一下朋友吧

恶搞源程序,小小的整蛊一下朋友吧

2024-12-01

空空如也

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

TA关注的人

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