- 博客(48)
- 收藏
- 关注
原创 stack
1. stack是一种,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶被压入和弹出。3. stack的底层容器可以是任何标准的容器类模板或一些其他特定的容器类;这些容器类应该支持以下操作:判空操作获取尾部元素操作尾部插入元素操作尾部删除元素操作4.标准容器。
2024-05-31 14:32:03
429
3
原创 vector~模拟实现
如果我们希望可以接收各种类型的迭代器区间的话,我们这里可以将该构造函数设计为一个函数模板,在函数体内将该迭代器区间的数据一个个尾插到容器当中即可,这里不能提前开空间,因为有的迭代器不支持减的操作,erase函数可以删除所给迭代器pos位置的数据,在删除数据前需要判断容器释放为空,若为空则需做断言处理,删除数据时直接将pos位置之后的数据统一向前挪动一位,将pos位置的数据覆盖即可。这两个重载函数与之不同的就是其参数n的类型不同,但这却是必要的,否则当我们使用以下代码时,编译器会优先与构造函数2相匹配。
2024-05-31 13:42:08
1122
原创 【C++】问题及补充(2)
vector和list都是C++ STL中的容器,它们被定义在不同的头文件中。vector在中定义,而list在中定义。因此,如果要使用它们,需要包含相应的头文件。通常情况下,C++中的类定义需要包含在头文件中,而类的实现则包含在源文件中。这样做的目的是为了避免在多个源文件中重复定义同一个类,从而引发编译错误。因此,在C++ STL中,vector和list的定义也需要写在头文件中,以便在需要使用它们的源文件中包含相应的头文件即可。
2024-05-30 15:59:49
941
原创 list~模拟实现
list的介绍1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一个元素和后一个元素。ps—>23. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。4.与其他的序列式容器相比(array,vector,deque),
2024-05-30 14:42:10
1173
原创 string~模拟实现
string的模拟实现,vs下:string的头文件string.cpp构造函数设置为缺省参数,若不传入参数,则默认构造为“ ”(空字符串)。字符串的初始大小和容量均设置为传入的字符串的长度。
2024-05-22 18:25:59
998
4
原创 【C++ 】学习问题及补充
如果自定义类型没有被初始化就直接赋值,那么其成员变量的值将是不确定的,也就是未定义行为。对于string类,如果没有被初始化就直接赋值,它的值将是随机的,可能是一些垃圾值,也可能是一个空字符串。这种行为是不可预测的,会导致程序出现不可预期的错误。建议在使用自定义类型时,一定要先进行初始化,以保证程序的正确性和可靠性。为什么没有被初始化就直接赋值,它的值将是随机的计算机中,内存是由一系列的字节构成的,当变量在内存中被定义时,它会被分配一块内存空间。
2024-05-21 15:13:36
1349
1
原创 【C++】深拷贝/浅拷贝
经典的string类问题在面试中,面试官总喜欢让我们来模拟实现string类,最主要是实现string类的构造、拷贝构造、赋值运算符重载以及析构函数。以 下string类的实现是否有问题说明:上述String类没有显式定义其拷贝构造函数与赋值运算符重载,此时编译器会合成默认的,当用s1构 造s2时,编译器会调用默认的拷贝构造。最终导致的问题是,s1、s2共用同一块内存空间,在释放时同一块 空间被释放多次而引起程序崩溃,这种拷贝方式,称为浅拷贝。
2024-05-16 15:45:54
293
2
原创 【C++】string类 部分接口介绍
C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数, 但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。
2024-05-13 23:06:55
1237
1
原创 【C++】 类的6个默认成员函数
1、非const对象(成员函数)即可以调用const对象(成员函数),也可以调用非const对象(成员函数)2、const对象(成员函数)只能调用const对象(成员函数),想调用非const对象(成员函数)就需要强转。
2024-05-10 14:52:40
1092
原创 【C++】this指针
对于下述类,有这样的一个问题:Date类中有 Init 与 Print 两个成员函数,函数体中没有关于不同对象的区分,那当d1调用 Init 函 数时,该函数是如何知道应该设置d1对象,而不是设置d2对象呢?我们先来定义一个日期类 Date。
2024-05-09 21:43:41
733
1
原创 c++ 入门2
函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这 些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型 不同的问题。
2024-05-08 13:51:55
609
原创 c++ 入门
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{} 中即为命名空间的成员。// 1. 正常的命名空间定义// bit是命名空间的名字,一般开发中是用项目名字做命名空间名。// 我们上课用的是bit,大家下去以后自己练习用自己名字缩写即可,如张三:zs// 1. 正常的命名空间定义// 命名空间中可以定义变量/函数/类型int val;//2. 命名空间可以嵌套//2. 命名空间可以嵌套int a;int b;int c;int d;
2024-05-08 13:22:44
272
原创 数据结构顺序表和链表
此时,两个指针每移动一次,之间的距离就缩小一步,不会出现每次刚好是套圈的情 况,因此:在满指针走到一圈之前,快指针肯定是可以追上慢指针的,即相遇。例如当前容量为100,满了以后增容到 200,我们再继续插入了5个数据,后面没有数据插入了,那么就浪费了95个数据空间。让一个指针从链表起始位置开始遍历链表,同时让一个指针从判环时相遇点的位置开始绕环 运行,两个指针都是每次均走一步,最终肯定会在入口点的位置相遇。快慢指针,即慢指针一次走一步,快指针一次走两步,两个指针从链表其实位置开始运行, 如果链表。
2024-05-07 15:33:48
959
原创 C语言 预处理
1. 预定义符号2.#define定义常量3. #define定义宏#define 机制包括了⼀个规定,允许把参数替换到⽂本中,这种实现通常称为宏(macro)或定义宏 (define macro)。其中的是⼀个,它们可能出现在stuff中。这个宏接收⼀个参数 x .如果在上述声明之后,你把 SQUARE( 5 );置于程序中,预处理器就会⽤ 下⾯这个表达式替换上⾯的表达式: 5 * 5乍⼀看,你可能觉得这段代码将打印36,事实上它将打印11,为什么呢?
2024-05-06 14:12:41
671
1
原创 C语言 函数递归
上述就是⼀个简单的递归程序,只不过上⾯的递归只是为了演⽰递归的基本形式,不是为了解决问 题,代码最终也会陷⼊死递归,导致。这样的思路就是把⼀个较⼤的问题,转为⼀个与原问题相似,但规模较⼩的问题来求解的。计算n的阶乘(不考虑溢出),n的阶乘就是1~n的数字累积相乘。的时候,n的阶乘是1,其余n的阶乘都是可以通过上述公式计算。递归是学习C语⾔函数绕不开的⼀个话题,那什么是递归呢?递归其实是⼀种解决问题的⽅法,递归就是函数⾃⼰调⽤⾃⼰。直到n是1或者0时,不再拆解。第一步:分析和代码实现。
2024-05-06 13:28:09
485
1
原创 【C】⽂件操作
一、⽂件的打开和关闭1.为什么使⽤⽂件?如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化的保存,我们可以使⽤⽂件。2.什么是⽂件?磁盘上的⽂件是⽂件。(从⽂件功能的⻆度来分类的)①.程序⽂件程序⽂件包括源程序⽂件(后缀为.c),⽬标⽂件(windows环境后缀为.obj),可执⾏程序(windows 环境后缀为.exe)。②.数据⽂件。
2023-12-09 22:03:56
162
10
原创 动态内存管理
有时会我们发现过去申请的空间太⼩了,有时候我们⼜会觉得申请的空间过⼤了,那为了合理的时候内存,我们⼀定会对内存的⼤⼩做灵活的调整。当是情况2 的时候,原有空间之后没有⾜够多的空间时,扩展的⽅法是:在堆空间上另找⼀个合适⼤⼩的连续空间来使⽤。有时候我们需要的空间⼤⼩在程序运⾏的时候才能知道,那数组的编译时开辟空间的⽅式就不能满⾜了。所以如果我们对申请的内存空间的内容要求初始化,那么可以很⽅便的使⽤calloc函数来完成任务。指向的空间不是动态开辟的,那free函数的⾏为是未定义的。
2023-12-08 15:59:41
153
8
原创 【C】递归函数
一、什么是递归递归其实是⼀种解决问题的⽅法,在C语⾔中,递归就是函数⾃⼰调⽤⾃⼰。上述就是⼀个简单的递归程序,只不过上⾯的递归只是为了演⽰递归的基本形式,不是为了解决问题,。递归的思想:把⼀个⼤型复杂问题层层转化为⼀个与原问题相似,但规模较⼩的⼦问题来求解;直到⼦问题不能再 被拆分,递归就结束了。所以递归的思考⽅式就是的过程。递归中的的意思,的意思。二、递归的限制条件递归在书写的时候,有2个必要条件:•递归存在,当条件的时候,递归便。•每次递归调⽤之后这个限制条件。
2023-12-06 09:37:58
152
8
原创 数据在内存中的存储
一、整数在内存中的存储一、整数在内存中的存储1.整数在内存中的存储详解整数的2进制表⽰⽅法有三种,即三种表⽰⽅法均有和两部分,符号位都是⽤0表⽰“正”,⽤1表⽰“负”,⽽数值位最⾼位的⼀位是被当做符号位,剩余的都是数值位。正整数的原、反、补码都相同。负整数的三种表⽰⽅法各不相同。直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。将原码的符号位不变,其他位依次按位取反就可以得到反码。反码+1就得到补码。为什么呢?在计算机系统中,数值⼀律⽤补码来表⽰和存储。
2023-11-29 13:45:15
293
7
原创 【C】内存函数
函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。如果source和destination有任何的重叠,复制的结果都是未定义的。memset是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容。⽐较从ptr1和ptr2指针指向的位置开始,向后的num个字节。
2023-11-25 18:07:34
285
11
原创 字符分类函数 / 字符转换函数
字符分类函数 / 字符转换函数字符分类函数 / 字符转换函数1.字符分类函数C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的。这些函数的使⽤都需要包含⼀个头⽂件是ctype.hiscontrlisspaceisdigitisxdigitislowerisupperisalphaisalnumispunctisgraphisprint是能够判断参数部分的 c 是否是⼩写字⺟的。
2023-11-24 18:13:30
245
11
原创 数组和指针笔试题解析/ 指针运算笔试题解析
sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。&数组名,这里的数组名表示整个数组,取出的是整个数组的地址。除此之外所有的数组名都表示首元素的地址。一、数组和指针笔试题解析。一、数组和指针笔试题解析。
2023-11-22 21:57:27
92
6
原创 【C】语言 sizeof和strlen的对比
strlen(arr1)是没法计算的,因为arr1数组里面没有\0,打印出的会是随机值。,如果操作数是类型的话,计算的是使⽤类型创建的变量所占内存空间的⼤⼩。只关注占⽤内存空间的⼤⼩,不在乎内存中存放什么数据。字符,直到找到为⽌,所以可能存在越界查找。sizeof计算操作数所占内存的⼤⼩,srtlen是求字符串⻓度的,统计的是。sizeof 和 strlen的对比。sizeof和strlen的对比。sizeof和strlen的对比。计算变量所占内存内存空间⼤⼩的,,就会持续往后找,可能会越界。
2023-11-22 20:11:53
113
4
原创 【C】语言 qsort使用举例 及 qsort函数的模拟实现
qsort函数的用法与冒泡对比1. qsort确实可以排序任意类型的数据2学会qsort怎么使用3.qsort在使用的时候,需要使用这传递一个函数的地址这个函数用来比较待排序的数组中的2个元素按照参数和返回值的要求实现就行。
2023-11-18 17:21:48
964
8
原创 【C】语言 函数指针及用途——[转移表]---[回调函数]
一、函数指针数组一、函数指针数组数组是⼀个存放相同类型数据的存储空间,我们学习了⽐如:那要把函数的地址存到⼀个数组中,那这个数组就叫,那函数指针的数组如何定义呢?答案是:parr1parr1先和[]结合,说明 parr1是数组,数组的内容是什么呢?是int (*)() 类型的函数指针。
2023-11-17 20:05:40
169
6
原创 【C】语言 深入理解指针(1)
不过,我们今天关⼼⼀组线,叫做。我们可以把野指针想象成野狗,野狗放任不管是⾮常危险的,所以我们可以找⼀棵树把野狗拴起来, 就相对安全了,给指针变量及时赋值为NULL,其实就类似把野狗栓前来,就是把野指针暂时管理起来。对于指针也是,在使⽤之前,我们也要判断是否为NULL,看看是不是被拴起来起来的野狗,如果是不能直接使⽤,如果不是我们再去使⽤。上述代码中n是不能被修改的,其实n本质是变量,只不过被const修饰后,在语法上加了限制,只要我 们在代码中对n就⾏修改,就不符合语法规则,就报错,致使没法直接修改n。
2023-11-10 17:05:25
105
3
原创 【C语言】操作符详解
一、操作符基本分类与注意一、操作符基本分类与注意操作符的分类•算术操作符:双目操作符•移位操作符: >——>移动的是二进制位•位操作符: & | ^ `——>使用的是二进制位进行计算•赋值操作符:+=-=*=/=%==&=|=^=•单⽬操作符:!++--sizeof类型•关系操作符:>=
2023-11-08 15:37:03
133
5
原创 数组练习—二分查找—多个字符从两端移动,向中间汇聚
你会1,2,3,4...这样猜吗?⼀般你都会猜中间数字,⽐如:150,然后看⼤了还是小了,这就是。⽐如我买了⼀双鞋,你好奇问我多少钱,我说不超过300元。你还是好奇,你想知道到底多少,我就让。b>找不到,根据大小关系,确定新的查找范围(折半)的数组中查找指定的数字n,很容易想到的⽅法就是。4、然后找到中间元素和要找的元素比较。3、根据左右下标确定中间元素下标。2、确定被查找范围左右下标。1、确定被查找的范围。
2023-11-06 21:02:21
128
3
空空如也
生成一个简单的数控机床带外螺纹和锥面的阶梯轴程序,带图
2024-06-11
双向迭代器和随机迭代器的区别
2024-05-30
vector和list的模拟实现
2024-05-30
变量的声明、定义、赋值和初始化都是在什么阶段进行的
2024-05-21
string对象已经分配好空间,为什么不初始化再赋值会报错
2024-05-18
TA创建的收藏夹 TA关注的收藏夹
TA关注的人