- 博客(37)
- 收藏
- 关注
原创 C++基础(12)——初识list
1.列表是序列容器,允许在序列内的任何位置进行恒定时间插入和擦除操作,以及在两个方向上的迭代。2.列表容器实现为双向链接列表;双向链接列表可以将它们包含的每个元素存储在不同且不相关的存储位置。通过与到它之前的元素的链接和到它之后的元素的链接的每个元素的关联,在内部保持排序。3.它们非常类似于: 主要区别在于对象是单链表,因此它们只能向前迭代,以换取更小和更高效。4.与其他碱基标准序列容器相比 (arrayvector和deque。
2024-10-07 19:56:58
1341
1
原创 C++基础(8)——string的相关面试题
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。数值为0或者字符串不是一个合法的数值则返回0。输入的字符串包括数字字母符号,可以为空。输入:"+2147483647"输出:“2147483647”分两步进行:1.先判断除第一个字符以外的其他字符,若不满足题意,则返回0,若满足则进行计算;2.最后判断第一个字符,若还是字符则进行计算并返回,若是正负号则加正负号返回,若都不是则返回0;
2024-10-05 10:35:51
475
原创 C++基础(7)——STL简介及string类
是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。string();//构造一个空字符串//用C-string构造string类//用C-string的前n个字符构造string类//用n个c字符构造string类//拷贝构造//用从pos位置开始的长度为len的字串来构造string类string s1;
2024-10-03 23:43:05
1379
原创 C++基础(6)——模板初阶
class 类模板名//类内成员声明public:_size = 0;// 扩容++_size;注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。除此之外,类模板不支持分离编译,即声明在x.h文件中,而定义却在x.cpp文件中。
2024-10-03 17:05:36
853
原创 C++基础(5)——内存管理
new的原理1. 调用operator new函数申请空间2. 在申请的空间上执行构造函数,完成对象的构造delete的原理1. 在空间上执行析构函数,完成对象中资源的清理工作2. 调用operator delete函数释放对象的空间new T[N]的原理1. 调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对 象空间的申请。
2024-10-01 20:51:47
1025
原创 C++基础(4)——类和对象(下)
1.之前我们实现构造函数时,初始化成员变量主要使⽤函数体内赋值,构造函数初始化还有⼀种⽅式,就是初始化列表,初始化列表的使⽤⽅式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成 员列表,每个"成员变量"后⾯跟⼀个放在括号中的初始值或表达式。每个成员变量在初始化列表中只能出现⼀次,语法理解上初始化列表可以认为是每个成员变量定义初始化的地⽅。2.引⽤成员变量,const成员变量,没有默认构造的类类型变量,必须放在初始化列表位置进⾏初始 化,否则会编译报错。
2024-09-17 15:09:22
1128
原创 Linux(1)——Linux基本指令
ls [选项][目录或文件]对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。常用选项:-a 列出目录下的所有文件,包括以 . 开头的隐含文件。-d 将目录象文件一样显示,而不是显示其下的文件。如:ls –d 指定目录-i 输出文件的 i 节点的索引信息。如 ls –ai 指定文件-k 以 k 字节的形式表示文件的大小。ls –alk 指定文件-l 列出文件的详细信息。-n 用数字的 UID,GID 代替名称。
2024-09-17 11:18:17
1570
原创 C++基础(3)——类和对象(中)
构造函数的特点:1. 函数名与类名相同。2. ⽆返回值。(返回值啥都不需要给,也不需要写void,不要纠结,C++规定如此)3. 对象实例化时系统会⾃动调⽤对应的构造函数。4. 构造函数可以重载。5. 如果类中没有显式定义构造函数,则C++编译器会⾃动⽣成⼀个⽆参的默认构造函数,⼀旦⽤⼾显式定义编译器将不再⽣成。6. ⽆参构造函数、全缺省构造函数、我们不写构造时编译器默认⽣成的构造函数,都叫做默认构造函 数。但是这三个函数有且只有⼀个存在,不能同时存在。
2024-09-17 10:32:38
877
原创 C++基础(2)——类和对象(上)
• class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。• 为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_或者m 开头,注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求。
2024-08-31 21:27:08
1240
原创 C++基础(1)——入门知识
• 定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中 即为命名空间的成员。命名空间中可以定义变量/函数/类型等。• namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下⾯的rand不在冲突了。• C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/ 类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。
2024-08-31 20:09:43
1183
原创 数据结构初阶(3)——栈和队列
其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出。栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。栈的删除操作叫做出栈。
2024-08-23 17:44:50
589
原创 数据结构初阶(2)——链表OJ
思路:先找中间节点,然后将节点后逆置,最后一一比较。思路:先判断是否相交,再计算长度差值,再一一比较。思路:快慢指针,快指针先走k格,慢指针同步。
2024-08-21 23:27:36
472
原创 数据结构初阶(1)——算法的时间复杂度和空间复杂度
它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知 道。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。6. 实例6基本操作执行最好1次,最坏O(logN)次,时间复杂度为 O(logN) ps:logN在算法分析中表示是底 数为2,对数为N。5. 实例5基本操作执行最好N次,最坏执行了(N*(N-1)/2次,通过推导大O阶方法+时间复杂度一般看最 坏,时间复杂度为 O(N^2)
2024-08-21 15:47:59
1373
原创 C语言(18)——双向链表专题
注意:这⾥的“带头”跟前⾯我们说的“头节点”是两个概念,实际前⾯的在单链表阶段称呼不严 谨,但是为了同学们更好的理解就直接称为单链表的头节点。
2024-08-19 22:46:17
339
原创 C语言(17)——单链表的应用
据说著名犹太历史学家Josephus有过以下的故事:在罗⻢⼈占领乔塔帕特后,39个犹太⼈与 Josephus及他的朋友躲到⼀个洞中,39个犹太⼈决定宁愿死也不要被⼈抓到,于是决定了⼀个⾃杀 ⽅式,41个⼈排成⼀个圆圈,由第1个⼈开始报数,每报数到第3⼈该⼈就必须⾃杀,然后再由下⼀ 个重新报数,直到所有⼈都⾃杀⾝亡为⽌。然⽽Josephus和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与⾃⼰安排在 第16个与第31个位置,于是逃过了这场死亡游戏。著名的Josephus问题。
2024-08-18 23:41:46
547
原创 C语言(16)——初识单链表
1、链式机构在逻辑上是连续的,在物理结构上不⼀定连续2、节点⼀般是从堆上申请的3、从堆上申请来的空间,是按照⼀定策略分配出来的,每次申请的空间可能连续,可能不连续。
2024-08-17 22:00:35
473
原创 C语言(15)——顺序表的应用
2.若src指向的值不为val,nums[dst]=nums[src],dst++,src++将nums2中数据依次放入到num1数组的后面,然后用排序算法对nums1进行排序。2)能够保存⽤⼾信息:名字、性别、年龄、电话、地址等。1.若src指向的值为val,则src++1)⾄少能够存储100个⼈的通讯信息。创建两个变量:src,dst。
2024-08-17 10:24:01
599
原创 C语言(14)——初识顺序表
线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是⼀种在实际中⼴泛使⽤的数据结构,常⻅的线性表:顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构,也就说是连续的⼀条直线。但是在物理结构上并不⼀定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。
2024-08-16 00:15:50
286
原创 C语言(13)——编译与链接
在ANSIC的任何⼀种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执⾏的机器指令(⼆进制指令)。第2种是执⾏环境,它⽤于实际执⾏代码。
2024-08-14 14:33:55
902
1
原创 C语言(12)——文件的读写
磁盘(硬盘)上的⽂件是⽂件。但是在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类 的)。上⾯说的适⽤于所有输⼊流⼀般指适⽤于标准输⼊流和其他输⼊流(如⽂件输⼊流);所有输出流⼀ 般指适⽤于标准输出流和其他输出流(如⽂件输出流)。
2024-08-14 12:02:24
737
1
原创 C语言(11)——动态内存管理
1. 栈区(stack):在执⾏函数时,函数内局部变量的存储单元都可以在栈上创建,函数执⾏结束时 这些存储单元⾃动被释放。栈内存分配运算内置于处理器的指令集中,效率很⾼,但是分配的内 存容量有限。栈区主要存放运⾏函数⽽分配的局部变量、函数参数、返回数据、返回地址等。2. 堆区(heap):⼀般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。分配⽅式类似于链表。3. 数据段(静态区)(static)存放全局变量、静态数据。程序结束后由系统释放。
2024-08-13 14:51:02
1124
1
原创 C语言(10)——结构体详解
位段的声明和结构是类似的,有两个不同:1. 位段的成员必须是int、unsigned int 或signed int,在C99中位段成员的类型也可以 选择其他类型。2. 位段的成员名后边有⼀个冒号和⼀个数字。A就是⼀个位段类型。那位段A所占内存的⼤⼩是多少?
2024-08-10 17:43:53
963
原创 C语言(9)——数据在内存中的存储
其实超过⼀个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分 为⼤端字节序存储和⼩端字节序存储,下⾯是具体的概念:⼤端(存储)模式:是指数据的低位字节内容保存在内存的⾼地址处,⽽数据的⾼位字节内容,保存 在内存的低地址处。⼩端(存储)模式:是指数据的低位字节内容保存在内存的低地址处,⽽数据的⾼位字节内容,保存 在内存的⾼地址处。上述概念需要记住,⽅便分辨⼤⼩端。
2024-08-09 23:56:35
900
原创 C语言入门(7)——字符函数
C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的。这些函数的使⽤都需要包含⼀个头⽂件是ctype.h这些函数的使⽤⽅法⾮常类似,我们就讲解⼀个函数的事情,其他的⾮常类似:islower 是能够判断参数部分的 c 是否是⼩写字⺟的。通过返回值来说明是否是⼩写字⺟,如果是⼩写字⺟就返回⾮0的整数,如果不是⼩写字⺟,则返回。
2024-08-09 00:24:21
1042
原创 C语言入门(6)——地址与指针
在讲内存和地址之前,我们想有个⽣活中的案例: 假设有⼀栋宿舍楼,把你放在楼⾥,楼上有100个房间,但是房间没有编号,你的⼀个朋友来找你玩, 如果想找到你,就得挨个房⼦去找,这样效率很低,但是我们如果根据楼层和楼层的房间的情况,给每个房间编上号 ,如:有了房间号,如果你的朋友得到房间号,就可以快速的找房间,找到你。如果把上⾯的例⼦对照到计算中,⼜是怎么样呢?
2024-08-06 23:55:00
866
原创 C语言入门(5)——操作符详解与初识结构体
/代码1:变量的定义int x;int y;}p1;//声明类型的同时定义变量p1//定义结构体变量p2//代码2:初始化。struct Stu //类型声明//名字int age;//年龄//初始化//指定顺序初始化//代码3int data;//结构体嵌套初始化//结构体嵌套初始化即使有了操作符的优先级和结合性,我们写出的表达式依然有可能不能通过操作符的属性确定唯⼀的 计算路径,那这个表达式就是存在潜在⻛险的,建议不要写出特别负责的表达式。
2024-08-06 00:43:00
749
原创 C语言入门(4)——递归(分治思想)
递归是学习C语⾔函数绕不开的⼀个话题,那什么是递归呢?递归其实是⼀种解决问题的⽅法,在C语⾔中,递归就是函数⾃⼰调⽤⾃⼰。//main函数中⼜调⽤了main函数return 0;上述就是⼀个简单的递归程序,只不过上⾯的递归只是为了演⽰递归的基本形式,不是为了解决问 题,代码最终也会陷⼊死递归,导致栈溢出(Stack overflow)。
2024-08-05 16:34:20
813
原创 VS调试技巧
当我们发现程序中存在的问题的时候,那下⼀步就是找到问题,并修复问题。这个找问题的过程叫称为调试,英⽂叫debug(消灭bug)的意思。调试⼀个程序,⾸先是承认出现了问题,然后通过各种⼿段去定位问题的位置,可能是逐过程的调 试,也可能是隔离和屏蔽代码的⽅式,找到问题所的位置,然后确定错误产⽣的原因,再修复代码, 重新测试。2.Debug和ReleaseDebug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序;
2024-08-05 10:36:35
646
原创 扫雷游戏实现
再继续分析,我们在棋盘上布置了雷,棋盘上雷的信息(1)和⾮雷的信息(0),假设我们排查了某 ⼀个位置后,这个坐标处不是雷,这个坐标的周围有1个雷,那我们需要将排查出的雷的数量信息记录存储,并打印出来,作为排雷的重要参考信息的。如果存放在布置雷的数组中,这样雷的信息和雷的个数信息就可能或产⽣混淆和打印上的困难。这⾥我们肯定有办法解决,⽐如:雷和⾮雷的信息不要使⽤数字,使⽤某些字符就⾏,这样就避免冲 突了,但是这样做棋盘上有雷和⾮雷的信息,还有排查出的雷的个数信息,就⽐较混杂,不够⽅便。
2024-08-04 23:01:03
849
原创 C语言入门(3)——数组与函数
这一节主要关于数组和函数的相关知识。语法形式:• ret_type 是函数返回类型⽤来表⽰函数计算结果的类型,有时候返回类型可以是 void ,表⽰什么都不返回• fun_name 是函数名为了⽅便使⽤函数;就像⼈的名字⼀样,有了名字⽅便称呼,函数有了名字⽅便调⽤,所以函数名尽量要根据函数的功能起的有意义。• 括号中放的是形式参数函数的参数就相当于,⼯⼚中送进去的原材料,函数的参数也可以是 void ,明确表⽰函数没有参 数。如果有参数,要交代清楚参数的类型和名字,以及参数个数。• {}括起来的是函数体。
2024-07-14 00:07:17
1491
1
原创 C语言入门(2)——条件语句与操作符
C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实 现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种 结构的组合。我们可以使⽤ if 、 switch 实现分⽀结构,使⽤ for 、 while 、 do while 实现循环结构。
2024-07-11 13:19:15
1009
原创 C语言入门(1)——C语言基础知识
⼈和⼈交流使⽤的是⾃然语⾔,如:汉语、英语、⽇语 那⼈和计算机是怎么交流的呢?使⽤计算机语⾔。⽬前已知已经有上千种计算机语⾔,⼈们是通过计算机语⾔写的程序,给计算机下达指令,让计算机 ⼯作的。C语⾔就是众多计算机语⾔中的⼀种,当然C++/Java/Go/Python都是计算机语⾔。
2024-07-09 15:00:04
1083
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人