自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 stack和queue

2、队列作为容器适配器实现,容器适配器即特定的容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素,元素从队尾入队列,从队头出队列。2、stack是作为容器适配器被实现的,容器适配器即是特定类封装作为其底层的容器,并提供一组特定的成员函数来访问元素。1、 stack是一个容器适配器,专门用在先进后出的上下文环境中,其删除只能从容器的一端进行元素的插入和删除。1、队列是一种容器适配器,专门用于先进先出的操作,其中从容器一端插入元素,另一端提取元素。

2025-09-27 16:46:53 234

原创 list的学习

list(size_t n,const value_type &val=value_type()) 构造的list中包含n个值为val的元素。3、任意位置插入和删除效率低,需要搬移元素, 任意位置插入删除效率高,为o(1)2、list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向前一个或后一个元素。3、list与forward_list非常相似,但forward_list只能朝前面迭代。

2025-09-24 11:51:18 1023

原创 vector()的使用

erase删除pos位置元素后,pos位置之后的元素会往前搬移,没有导致底层空间的改变,理论上讲迭代 器不应该会失效,但是:如果pos刚好是最后一个元素,删完之后pos刚好是end的位置,而end位置是 没有元素的,那么pos就失效了。3、本质讲,vector使用动态分配来存储它的元素,当新元素插入时,这个数组需要被重新分配大小,为了增加存储空间,其做法是,分配一个新的数组,让后将全部数组转移到这个数组。5、因此,vector占用了更多的存储空间,为了获得管理存储空间的能力,并且以一种有效的方式动态增长。

2025-09-19 09:11:53 888

原创 string详解

3、resize(size_t n)与resize(size_t n,char c) 都是将有效字符改变到n个,不同的是当字符个数增多时,一个是用0填充,一个用c来填充多出来的元素空间,如果改的时候元素个数增多,底层空间容量也会改变。4、reserve(size_t res_arg=0) 为string预留空间,不改变有效元素个数,当reserve的参数小于string的底层空间总大小,reserve不会改变容量大小。2、clear()只是将string中有效字符清空,不改变底层空间大小。

2025-09-15 18:45:49 866

原创 模板初阶c++

函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。所以其实模 板就是将本来应该我们做的重复的事情交给了编译器。对于类型的设置 我们可以使用class、typename的方式进行命名类型替换(关键字)如果在条件相同的情况下 会优先调用非函数模板 当参数不符合时再调用函数模板。当一个同名的非函数模板与函数模板出现时,这个函数模板可以实例化为非函数模板。模板实例化需要在模板名后面加<> 实例化的结果才是真正的类。因此我们会采用模板的方式解决这个现状。

2025-08-29 10:11:37 175

原创 c++的内存管理

内存泄漏并不 是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而 造成了内存的浪费。operator new 实际也是通过malloc来申请空间,如果malloc申请空间 成功就直接返回,否则执行用户提供的空间不足应对措施,如果用户提供该措施就继续申请,否则就抛异常。如果申请的是内置类型的空间,new和malloc,delete和free基本类似,不同的地方是:new/delete申请和释放的是单个元素的空间,new[]和delete[]申请的是连续空间,而且。

2025-08-28 17:49:38 369

原创 c++类和对象(3)

声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;5. 静态成员也是类的成员,受public、protected、private 访问限定符的限制、友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。2. 注意内部类可以直接访问外部类中的static成员,不需要外部类的对象/类名。如果一个类定义在另一个类的内部,这个叫内部类(java用的比较多)友元函数可访问类的私有和保护成员,但不是类的成员函数。一个函数可以是多个类的友元函数。

2025-08-21 13:44:53 350

原创 c++类和对象(2)

将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数 隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。默认的拷贝构造函数对象按内存存储按 字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝。如果类中没有显示定义构造函数,则c++编译器会自动生成一个无参的默认构造函数。与构造函数功能相反 ,对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。3、一个类只能有一个析构函数 如果没定义 自动生成默认的析构函数(不能重载). 这五个不能重载。

2025-08-19 01:07:30 292

原创 c++类和对象(1)

比如:对于电脑这样一个复杂的设备,提供给用 户的就只有开关机键、通过键盘输入,显示器,USB插孔等,让用户和计算机进行交互,完成日 常事务。protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)在上面的person类对象中 person就像一家白纸 实例化是对白纸的填充。当在cpp文件中定义时要使用.h文件的类的名字 用::person来引用。在使用不同类时我们也需要根据需要使用::来调用不同的类。在类中的变量我们成为成员变量。

2025-08-17 22:46:14 803

原创 c++入门

5. 实际上cout和cin分别是ostream和istream类型的对象,>>和也涉及运算符重载等知识, 这些知识我们我们后续才会学习,所以我们这里只是简单学习他们的使用。使用命名空间的目的是对标识符的名称进行本地化, 以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含< iostream >头文件中。a和ra的地址是同一个,在这里ra++,也是a++,反之同理。

2025-07-31 20:25:58 672

原创 排序的代码与理解

希尔排序法的基本思想是:先选定⼀个整数(通常是gap=n/3+1),把 待排序⽂件所有记录分成各组,所有的距离相等的记录分在同⼀组内,并对每⼀组内的记录进⾏排序,然后gap=gap/3+1得到下⼀个整数,再将数组分成各组,进⾏插⼊排序,当gap=1时,就相当于直接插⼊排序。每⼀次从待排序的数据元素中选出最⼩(或最⼤)的⼀个元素,存放在序列的起始位置,直到全部待 排序的数据元素排完。这里假设我给一个数组 4,6,2,8,1,9,5,3,0,7。,直到所有的记录插⼊完为⽌,得到⼀个新的有序序列。

2025-07-24 21:36:36 388

原创 二叉树的理解与题目

在树形结构中,我们最常⽤的就是⼆叉树,⼀棵⼆叉树是结点的⼀个有限集合,该集合由⼀个根结点 加上两棵别称为左⼦树和右⼦树的⼆叉树组成或者为空。若规定根结点的层数为 1 ,具有 n 个结点的满⼆叉树的深度h=log(n+1)( log 以2为底, n+1 为对数)1. 若 i>0 , i 位置结点的双亲序号: (i-1)/2;2. 若 2i+1,左孩⼦序号: 2i+1 , 2i+1>=n 否则⽆左孩⼦。3. 若 2i+2,右孩⼦序号: 2i+2 , 2i+2>=n 否则⽆右孩⼦。

2025-07-18 14:58:31 896

原创 数据结构初阶-栈和队列

栈是一种特殊的线性表,是一种只能从同一端进出的结构,遵循“先进后出原则”(先进入的最后出来)入数据和出数据都是在栈顶。

2025-07-05 19:49:03 201

原创 顺序表的学习

线性表是⼀种在实际中⼴泛使⽤的数据结构,常⻅的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的⼀条直线。但是在物理结构上并不⼀定是连续的,线性 表在物理上存储时,通常以数组和链式结构的形式存储。概念:顺序表是⽤⼀段物理地址连续的存储单元依次存储数据元素的线性结构,⼀般情况下采⽤数组存储。顺序表的底层结构是数组,对数组的封装,实现了常⽤的增删改查等接⼝。静态顺序表存在空间有限,开太小数据无法存储,太大浪费空间。

2025-06-10 11:28:32 227 1

原创 时间复杂度和空间复杂度

1. 时间复杂度函数式 T(N) 中,只保留最⾼阶项,去掉那些低阶项,因为当 N 不断变⼤时, 低阶项对结果影响越来越⼩,当 N ⽆穷⼤时,就可以忽略不计了。2. 如果最⾼阶项存在且不是 1 ,则去除这个项⽬的常数系数,因为当 N 不断变⼤,这个系数 对结果影响越来越⼩,当 N ⽆穷⼤时,就可以忽略不计了。空间复杂度不是程序占⽤了多少bytes的空间,因为常规情况每个对象⼤⼩差异不会很⼤,所以空间复 杂度算的是变量的个数。在计算机科学中,算法的时间复杂度是⼀个函数式T(N),它定量描述了该算法的运⾏时间。

2025-06-09 14:37:03 154

原创 程序环境与预处理

1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。它允许宏定义从分离的文本片段创建标识符。第2种是执行环境,它用于实际执行代码。但先后顺序可以用()来确定。##可以把位于它两边的符号。答案是11而不是36。

2025-06-07 00:35:05 148

原创 c语言文件操作

每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名 字,文件状态及文件当前的位置等)。可以使pf指向某个文件的文件信息区(是一个结构体变 量)。通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量能够找到与它关联 的文件。在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系。缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”。文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。

2025-06-06 23:16:50 241

原创 动态内存管理

返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己 来决定。有时会我们发现过去申请的空间太小了,有时候我们又会觉得申请的空间过大了,那为了合理的时 候内存,我们一定会对内存的大小做灵活的调整。函数的功能是为 num 个大小为 size 的元素开辟一块空间,并且把空间的。这个函数调整原内存空间大小的基础上,还会将原来内存中的数据移动到新的空间。如果参数ptr指向的空间不是动态开辟的,那free函数的行为是未定义的。1. 空间开辟大小是固定的。

2025-06-06 21:22:18 161

原创 结构体,枚举,联合体

VS中默认的值为8 Linux中没有默认对齐数,对齐数就是成员自身的大小 3. 结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整 体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。联合也是一种特殊的自定义类型 这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。这是结构体的基本结构。

2025-06-05 21:14:27 306

原创 数据的存储

但是在C语言中除了8 bit的char之外,还有16 bit的short 型,32 bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32 位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。对于大端模式,就将 0x11 放在低地址中,即 0x11 为 0x0010 中, 0x22 放在高 地址中,即 0x0011 中。同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程 是相同的,不需要额外的硬件电路。

2025-06-04 21:18:42 226

原创 浮点型的数据存储

0.5的二进制为0.1,由于规定正数部分必须为1,小数点右移,变成1.0*2^(-1)当e为八位时,它的取值范围在0-255;当e为11位时,它的取值范围在2047。将e的值减去127(或1023),得到真实值,再将有效数字m前加上第一位1。根据IEEE754规定,存入内存时e的真实值必须再相加一个中间数。阶码就是e(-1)+127=126,表示为01111110。m不在加上第一位的1,而是还原0.xxxxx的小数。2-3之间表示e的部分有八个bit位。e=1-127(或e-1023)

2025-01-05 21:26:00 282 1

原创 简易扫雷游戏的制作

在布置10个雷的过程中,我们需要考虑在9*9的棋盘中随机生成10个字符’1‘,这时我们会想到rand函数和srand(用来初始化随机数的种子的)加time(时间戳)这一套组合牌来实现。排查雷的函数的形参设置为再mine数组中排查雷,然后将排查的信息传到show数组中,在9*9的棋盘中进行排查。排查雷就是判断mine[x][y]这个下标位置处是否是’1‘,如果是,就被雷炸死了,如果不是,计算周围8个位置雷的信息,将周围8个位置的字符加起来-’0‘*8的结果是一个数字,再加上’0‘就变成了字符数字。

2024-12-08 19:00:45 420 1

原创 使用循环结构编写程序

循环语句的介绍

2024-12-01 20:07:16 419 1

空空如也

空空如也

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

TA关注的人

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