自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 stack 和 queue

1. 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。3. 底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支持以下操作:empty:检测队列是否为空size:返回队列中有效元素的个数front:返回队头元素的引用back:返回队尾元素的引用。

2024-06-03 23:45:37 616

原创 list 的实现

list实际上是一个带头双向循环链表,要实现list,则首先需要实现一个结点类,而一个结点需要存储的信息为:数据、前驱指针、后继指针而对于该结点类的成员函数来说,我们只需实现一个构造函数即可,因为该结点类只需要根据数据来构造一个结点即可,而结点的释放则由list的析构函数来完成,

2024-05-29 23:53:42 733

原创 vector 的实现

vector 是表示大小可以变化的数组的序列容器。就像数组一样,vector 对其元素使用连续的存储位置,这意味着也可以使用指向其元素的常规指针上的偏移量来访问其元素,并且与数组中的元素一样高效。但与数组不同的是,它们的大小可以动态变化,它们的存储由容器自动处理。在内部,vector 使用动态分配的数组来存储其元素。当插入新元素时,可能需要重新分配此数组才能增大大小,这意味着分配一个新数组并将所有元素移动到该数组。

2024-05-22 23:38:18 567

原创 C++string 类的常用方法

iterator 是定义在类域里面的我们可以通过迭代器来修改指向的内容。

2024-05-12 22:59:54 991

原创 模板初阶()

比如:当用double类型使用函数模板时,编译器通过对实参类型的推演,将T确定为double类型,然后产生一份专门处理double类型的代码,对于字符类型也是如此。类模板实例化与函数模板实例化不同,类模板实例化需要在类模板名字后跟<>,然后将实例化的类型放在<>中即可,类模板名字不是真正的类,而实例化的结果才是真正的类。函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。

2024-04-26 23:26:04 978

原创 C/C++内存管理

new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数注意:在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与free不会。若没有默认构造函数则会报错大括号中为什么能传数字呢?隐式类型转换然后再进行拷贝构造由于编译器优化的原因直接调用构造class Apublic:: _a(a): _a(a)A(A& a)_a = a._a;~A()

2024-04-21 22:40:18 704 1

原创 类与对象(下)

static修饰的成员函数不能给缺省值,缺省值是给初始化列表的,他在静态区不存在对象中,不走初始化列表。所以要将operator

2024-04-18 22:20:39 627

原创 类与对象(中)

将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数。注意:后置++是先使用后+1,因此需要返回+1之前的旧值,故需在实现时需要先将this保存。这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需。返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。因为this 指针的原因我们需要像下面这样输出,可这样是不符合逻辑的。隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。

2024-04-15 23:14:08 724

原创 类的六个默认成员函数(上)

对于日期(Date)类,可以通过 Init 公有方法给对象设置日期,但如果每次创建对象时都调用该方法设置信息,未免有点麻烦,那能否在对象创建时,就将信息设置进去呢?构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证每个数据成员都有 一个合适的初始值,并且在对象整个生命周期内只调用一次。

2024-04-12 23:17:29 662

原创 字符输入输出函数

用法与printf("%c" , c[ i ]);手动输入 abc‘\n’ 以下是运行结果。结束后会自动在末尾加上 \0。自动读取流中数据进行输入。自动输出到'\0'结束。

2024-04-11 23:05:27 266 1

原创 字符串函数

⽐较str1和str2的前num个字符,如果相等就继续往后⽐较,最多⽐较num个字⺟,如果提前发现不⼀样,就提前结束,⼤的字符所在的字符串⼤于另外⼀个。"qwe" 存在程序内存的常量区中,是编译时就固定下来的(不可更改),然后c是一个指向常量区"qwe" 的指针,c本身存在栈区。• 如果源字符串的长度⼩于num,则拷⻉完源字符串之后,在⽬标的后边追加0,直到num个。需要注意的是函数的返回值为(无符号整型)size_t。会将源字符串中的 '\0' 拷⻉到⽬标空间。• 拷⻉num个字符从源字符串到⽬标空间。

2024-04-10 22:30:50 867 1

原创 通过键盘输人任意一些字符,统计字母、数字、空格及其他字符的个数(除数字、空格和字母以外的字符均属于其他字符,当通过键盘输人“$”时结束。

调用 getchar()函数,将从键盘输人的数据暂存到键盘缓冲区,直到输入结束(遇到'$'字符)后,将缓冲区中的数据一起输人到计算机中。利用while循环对每个字符进行判断和统计,直到遇到'$'字符为止。不过上面代码我们需要注意的是 循环后面括号里的条件表达式我们需要给 c = getchar() 加上括号否则 getchar() 中的字符不会输入到变量 c 中运行结果如下:这两段代码效果一样:由于并没有赋值给 C所以C中储存的内容是随机的。

2024-04-08 19:29:04 150

原创 类和对象(上)

在C++ 中更喜欢用 class 来定义类//成员函数void Init(int n = 4)//不需要传参类里面直接能访问return;top = 0;//成员变量int* arr;size_t top;stack st2;st2.Init();return 0;不过这样写是会报错的,报错如下:这是因为C++引入了访问限定符。

2024-04-06 20:36:30 824 1

原创 C++入门(2)

在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量,但是编译器默认情况下将其看成是一个整形常量,如果要将其按照指针方式来使用,必须对其进行强转(void*)0。是一直没有人去使用它,C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的。

2024-04-01 21:52:29 593

原创 C++的入门

从右往左使用”意思是,当调用函数给函数传递实际参数时,第一个实参对应着第一个第一个形参,第二个实参对应着第二个形参,第三个实参对应着第三个形参,使用缺省参数时,当只传递一个实际参数时,该实际参数对应着第一个形参,此时使用第二个和第三个缺省参数,同理,当传递两个实际参数时,两个实际参数对应的前两个形参,使用第三个缺省参数,即总是满足最右边的缺省参数是第一个使用的。在C语言中,为了可以通过其他变量直接改变某一个变量的值由此引出了指针的概念,通过指针类型可以改变该指针指向的空间的内容。

2024-03-29 23:55:05 978 1

原创 六大排序算法

3、在走的过程中,若end遇到小于key的数,则停下,begin开始走,直到begin遇到一个大于key的数时,将begin和right的内容交换,end再次开始走,如此进行下去,直到begin和end最终相遇,此时将相遇点的内容与key交换即可。5.将key的左序列和右序列再次进行这种单趟排序,如此反复操作下去,直到左右序列只有一个数据,或是左右序列不存在时,便停止操作,此时此部分已有序。每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

2024-03-24 23:00:07 815 2

原创 堆排序的应用

找到倒数第二个叶节点(10)的父节点也就是 15 ,但是它小于15 所以不需要进行交换。我们找到了最后一个叶子节点的父节点,即元素值为70 的节点,比较它的左右节点中最大的一个的值,是否比他大,如果大就交换位置。当我们删除一个最大堆的堆顶(并不是完全删除,而是替换到最后面),经过自我调节,第二大的元素就会被交换上来,成为最大堆的新堆顶。接着找下一个位置的节点(70),它大于父节点然后进行交换。小堆每个节点的值都小于或者等于它的左右孩子节点的值。大堆每个节点的值都大于或者等于它的左右孩子节点的值。

2024-03-21 22:29:46 310 1

原创 编译与链接

变量的地址,所以暂时把调⽤ Add 的指令的⽬标地址和 g_val 的地址搁置。• 处理#include 预编译指令,将包含的头⽂件的内容插⼊到该预编译指令的位置。将源代码程序被输⼊扫描器,扫描器的任务就是简单的进⾏词法分析,把代码中的字符分割成⼀系列的记号(关键字、标识符、字⾯量、特殊字符等)。• 注:在Windows环境下的⽬标⽂件的后缀是 .obj ,Linux环境下⽬标⽂件的后缀是 .o。我们在 test.c 的⽂件中使⽤了 add.c ⽂件中的 Add 函数和 g_val 变量。

2024-01-16 19:52:34 826 1

原创 文件的操作

硬盘 磁盘上面就是文件在程序设计中,从文件功能的角度分类分为两种:程序文件和数据文件而程序文件包含了后缀为:(.c)的源程序文件,(.obj)的目标文件,(.exe)的可执行程序。数据文件则是程序运行需要从中读取数据的文件,或者输出内容的文件。本章讲述的是数据文件。函数名功能适⽤于fgetc字符输⼊函数所有输⼊流fputc字符输出函数所有输出流fgets⽂本⾏输⼊函数所有输⼊流fputs⽂本⾏输出函数所有输出流fscanf格式化输⼊函数所有输⼊流fprintf。

2024-01-15 14:25:27 955 1

原创 结构体的介绍

在C语言中已经提供了内置类型,如:等。但是在实际应用中只有这些内置类型还是不够的,我们无法用单一的内置类型来描述一个复杂的对象。就像描述一个学生,我们他的需要 名字、年龄、学号、⾝⾼、体重等;所以C语言就给出了除内置类型之外的一种类型:自定义类型,有了这种类型我们就能够自己来构建类型了。而比较常用的自定义类型就有结构体。1.什么是结构体结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量,如: 标量、数组、指针,甚⾄是其他结构体。

2023-12-04 00:18:43 720

原创 数据在内存中的存储

其实超过⼀个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分为⼤端字节序存储和⼩端字节序存储,下⾯是具体的概念:⼤端(存储)模式:是指数据的低位字节内容保存在内存的⾼地址处,⽽数据的⾼位字节内容,保存在内存的低地址处。⼩端(存储)模式:是指数据的低位字节内容保存在内存的低地址处,⽽数据的⾼位字节内容,保存在内存的⾼地址处。由上面代码可以发现数据 a的低位字节内容也就是‘44’保存在内存的低地址处。因此可以得出vs是以小端模式存储的。至于为什么会有大小端之分。

2023-12-01 21:47:33 852 1

原创 字符串函数和内存函数

定义了一个大小为 100 个字符的字符数组,但用于初始化 mystr 的 C 字符串的长度只有 11 个字符。因此,sizeof(mystr) 的计算结果为 100,而 strlen(mystr) 返回 11。strlen 函数中C 字符串的长度由终止 '\0' 字符确定:C 字符串的长度与字符串开头和终止 '\0' 字符之间的字符数相同(不包括终止 '\0' 字符本身)。造成这种情况是因为再追加的过程中'\0'字符会被world 中的w 给替代掉导致字符串中没有'\0'。strncat函数的意思就是。

2023-11-30 00:47:54 1320

原创 C语言指针详解

上述代码中就使用到解引用操作符,*p 的意思就是通过 p 中存放的地址,找到指向的空间,*p 就是其实就是a 变量了;所以p就是存放数组arr的指针,他的类型是int( *) [ 5] 表示p指向的是一个大小为5个整形的数组。通过以上函数可以发现函数也是有地址的,函数名就是函数的地址,也可以通过&函数名的方法来获取函数的地址。根据上⾯的例⼦,第⼀⾏的⼀维数组的类型就是 int [3] ,所以第⼀⾏的地址的类。根据数组名是数组⾸元素的地址这个规则,⼆维数组的数组名表⽰的就是第⼀⾏的地址,是⼀。

2023-11-25 00:36:05 636

原创 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。编写一个函数找出这两个只出现一次的数字。

一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。就说明这个数在数组中有多个.如果不为零则说明只出现了一次。有数组的元素是:1,2,3,4,5,1,2,3,4,6。他们的结果就是零也就是2^2=0 a^a=0.所以我的思路是从数组中抽一个数,把他与数组中其他数都。编写一个函数找出这两个只出现一次的数字。在编写代码之前我们要知道两个相同的数。只有5和6只出现1次,要找出5和6.按位异或一次只要得到零,最后代码的运行结果由下。由此我设计了以下代码。

2023-11-18 18:07:21 162 2

原创 求第n个斐波那契数

总的来说递归是更通俗易懂一点,不过用递归往往会耗费更多的时间,这里我们发现,这种递归写法虽然实现了该功能,但是效率较低,如果我们计算第40个斐波那契数的话,程序会执行很长一段时间。这里的while循环是为了输入多个不同n变量,进入循环,中f是为了告知第几位斐波那契数,因为循环中每循环一次n会--所以需要一个f来储存n的值.斐波那契数列的排列是:1,1,2,3,5,8,13,21,34,55,89,144……(第一百位斐波那契数执行不出来,是因为一个整形中能储存的最大数是有限的)当然我们还能用递归来实现。

2023-11-06 09:50:58 134 3

原创 求0-100000的水仙花数

水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。求出0~100000之间的所有“水仙花数”并输出。

2023-11-04 18:24:56 206 2

原创 扫雷游戏的设计

扫雷游戏作为一种老少咸宜的益智游戏,它的游戏目标十分简单,就是要求玩家在最短的时间内,根据点击格子之后所出现的数字来找出所有没有炸弹的格子,同时在找的时候要避免点到炸弹,一旦踩到炸弹则游戏结束。。

2023-11-02 09:55:21 305 2

原创 输入两个整数求最大公约数

if (f % flag == 0)//在能整除i的数中求出能整除f的数。//这时t就是i和f的最大公约数。//把i和f的公约数赋给t。if (i % flag == 0)//求出能整除i的数。

2023-10-26 19:50:50 56 2

原创 C语言分支循环语句

表达式2”通常是关系表达式或者逻辑表达式,是循环控制的条件,循环反复执行多次,必须是在循环条件满足的情况下(“表达式2”的值非0)才能执行,否则终止循环;“表达式3”是赋值表达式或者算术表达式,使循环变量的值得到修改,是循环只能进行有限次数;其中圆括号中的“表达式”为循环控制条件,如果表达式结果正确,则执行该循环;控制循环的表达式为逻辑表达式,也可为其他复杂表达式,如赋值表达式等。循环开始,计算“表达式”,如果其值为true则执行“循环体”,否则循环结束;”,执行完之后接着去执行“}”后面的语句;

2023-10-26 09:44:23 55 2

空空如也

空空如也

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

TA关注的人

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