自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++模拟实现vector

由源码可知,用三个迭代器就可以构建出一个vector顺序容器,三个迭代器分别指向顺序容器的头(start)、有效大小截止处(finish)、总容量截止处(end_of_storage):模拟实现时也借鉴次方法,步骤如下:☀️二、迭代器相关🎈1.vector的迭代器的表示vector是顺序容器,因此其指针就相当于迭代器,直接将数据指针T*typedef即可。注意迭代器还有const类型的。🎈2.指向首元素的迭代器(const+非const)🎈3.指向末尾元素下一个位置的迭代器(const

2024-06-03 13:29:25 926

原创 C++ list介绍

构造空list构造可包含n个T类型数据的list构造list,用first到last区间中的元素构造。注意可以是别的容器中的元素。(例如可以用vectorintint中的一段数据构造一个新的listintint。还可以用string等等)。拷贝构造。用已有的一个list构造新的list。注:前提是原链表和链表x都为有序链表,默认升序。将有序链表x按照默认的升序合并至原链表中,合并后x变为空链表。

2024-05-08 00:52:44 692

原创 C++ vector介绍

用于构造一个数组,根据使用的构造函数版本初始化其内容。重载1:空容器构造函数(默认构造函数)。构造一个没有元素的空容器(空数组)。重载2:构造一个包含n个元素的容器。每个元素都是val。重载3:范围构造函数。构造一个包含与范围 [第一个,最后一个)一样多的元素的容器,每个元素都以相同的顺序从该范围中的相应元素构造而成。重载4:拷贝构造函数。以相同的顺序构造一个包含x中每个元素的副本的容器。(1)简要概括功能该函数作用是调整容器的大小,使其包含n个元素,并对所有位置初始化。

2024-03-22 13:35:42 776

原创 C++模拟实现string

std库中的string是一个类,对string的模拟实现,既可以复习类的特性,也可以加深对std::string的理解。

2024-03-07 22:21:11 663

原创 C++ string介绍

②string::const_iterator是一个迭代器类型名(这个类型下的迭代器只能遍历逆置的(字符串)、被const修饰的数据),想要在此类型上创建一个迭代器,命名为cit,语句应该写为:string::const_iterator cit;①string::iterator是一个迭代器类型名(这个类型下的迭代器只能遍历正向的(字符串)、没有被const修饰的数据),想要在此类型上创建一个迭代器,命名为it,语句应该写为:string::iterator it;请注意,此容量不限制字符串的长度。

2024-02-28 18:20:53 897

原创 C++模版(初阶)

对于非模板函数和同名函数模板,如果其他条件都相同,在调动时会优先调用非模板函数而不会从该模板产生出一个实例。通过实参a1将T推演为int,通过实参d1将T推演为double类型,但模板参数列表中只有一个T,编译器无法确定此处到底该将T确定为int 或者 double类型而报错。函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。(2)如果函数中多个参数有多个类型,在template里面,有几个不同的类型,就定义几个模版参数;

2024-02-10 22:06:55 631

原创 C++内存管理

主要针对的是类class Apublic:: _a(a)~A()private:int _a;nt main()// new可以初始化,malloc不行free(p1);delete p2;//申请一段连续空间时,new后面要跟[N],delete后面要跟[]free(p3);return 0;new的过程分为两部分:①开辟空间 ②调用构造函数初始化delete的过程分为两部分:①调用析构函数 ②释放的空间。

2024-02-09 14:26:31 600

原创 类和对象(下)

对类内静态成员变量的访问:可见二者访问的是同一个东西,同一块地址。return 0;说明计算外部类A的时候不会计算上B。

2024-02-05 16:34:20 794

原创 C++类和对象(中)六个默认成员函数

class Dateprivate:// 基本类型(内置类型)// 自定义类型Time _t;return 0;运行结果:分析:main方法中创建了Date对象d,而d中包含4个成员变量;在4个成员变量中,_year、_month、 _day三个是内置型变量,_t是自定义类型变量;

2024-01-31 22:46:18 1140 2

原创 完整地实现日期类(分3个文件+测试结果)

/构造函数_day = day;//同时完善日期检查功能cout << "日期错误" << endl;return;//得到某月的总天数//得到某年的总天数return 366;return 365;//打印日期cout << _year << "年" << _month << "月" << _day << "日" << endl;//判断是否相等//判断是否不相等return!//判断是否大于//判断是否小于等于return!//判断是否大于等于。

2024-01-31 22:44:13 638

原创 C++类和对象(上)

在struct的基础上,将struct改成class关键字,后序使用这个类类型时,不需要加上class关键字,那个自定义的名字就是类类型。(C++兼容C语言,因此struct也能用来表示类,而且后序使用时也可以省略struct关键字)public:_a = a;_b = b;_c = c;int _b;int _c;类成员分为成员变量和成员函数,成员变量一般被private修饰,成员函数多数被public修饰,充当类和外界的接口。

2024-01-20 23:45:14 1045 2

原创 初识C++

当函数既有声明又有定义时,缺省参数不可以在声明和定义中都出现,防止两个参数值不一样。也不能只在定义中出现声明中不出现,这样包含头文件时会不知道声明中的参数是几。只能单独在声明中出现。.h文件中的声明里需要出现缺省值:引用和指针的底层都开辟空间了。

2024-01-15 20:58:16 949

原创 树基本概念+前中后序遍历二叉树

一棵二叉树是结点的一个有限集合,该集合或者为空,或者由一个根节点加上两棵别称为左子树和右子树的二叉树组成。

2023-12-03 01:35:12 913 1

原创 特殊二叉树——堆

1.堆:非线性结构,是完全二叉树2.堆分为大堆和小堆。大堆:树中任意一个父亲都大于等于孩子,根节点值大于等于其所有子孙节点的值。小堆:树中任意一个父亲都小于等于孩子,根节点值小于等于其所有子孙节点的值。3.“同辈”即同一层数据间的大小顺序不做要求。4.堆的物理结构即实际内存中存储的结构是顺序表,但逻辑结构是树。5.堆特性:堆中最有用的数据是堆的根节点。小堆的根是整棵树的最小值,大堆的根是整棵树的最大值.6.堆的用途:①topk问题 ②堆排序。

2023-12-01 18:43:37 1000 1

原创 链表形式队列

Node;Node* head;Node* tail;int size;}Queue;int age;int height;}Student;}Node;Node* head;Node* tail;int size;}Queue;

2023-09-01 17:44:59 320 21

原创 顺序栈(数组形式)的实现

STACK_SIZE 4:最开始初始化开辟的空间大小,可以存放4个元素STACK_INCREASE 2:如果空间不够用,则每次增加2个位置42int age;int height;}Student;}Stack;int top;}Stack;

2023-08-31 21:35:12 221 7

原创 实现带头双向循环链表

描述:一个节点内包含两个指针,一个指向上一个节点,另一个指向下一个节点。哨兵位指向的下一个节点为头节点,哨兵位的上一个指向尾节点。结构优势:高效率找尾节点;高效率插入与删除;无需判断多种复杂情况,如尾节点、空节点等。

2023-08-30 20:24:52 674 16

原创 单链表oj题

链接: https://leetcode.cn/problems/reverse-linked-list/description/写法一:写法二:思路二:将原链表所有节点头插到一个空指针前将原链表中的节点拿下来,头插到新链表,无需给每个节点都开辟新空间🍟2.替换法删除含义:不知道头结点的情况下删除给出的pos位置的结点缺陷:删不了尾节点代码:测试结果:链接: https://leetcode.cn/problems/remove-linked-list-elements/descripti

2023-08-29 18:37:54 134 8

原创 指向任意节点的带环链表

当fast在slow后面且相隔1个节点时,再移动一次变成了fast在slow前且相隔1节点,进入了新一轮追逐,追逐距离还是是C-1(注意:追逐距离不是C-2),而C-1是奇数时,不管怎么减2,都不可能减为0,只会从1减到-1,又进入新一轮循环,追逐距离还是C-1,奇数,陷入死循环。相同时间内fast走过的路程是slow的二倍,fast和slow相遇时,slow一定不可能走过了一整个环(假设slow走过了一次整个环,则fast走过了两次环,在这期间二者一定会相遇,因此假设不成立)。假设起点到入口点长度:L。

2023-08-29 17:36:54 200 3

原创 C#类型转换

大体分为三个大类型:整型(其中又分为有符号整型、无符号整型)、浮点型、特殊类型注意:浮点数在初始化时要在值后加上后缀,双精度浮点数decimal的后缀为“M”、单精度浮点数double和float的后缀为“f”。

2023-08-04 21:26:42 1476 14

原创 带头单链表,附带完整测试程序

int age;int height;} Student;} Node;

2023-08-03 19:36:55 276 11

原创 无头单链表,有完整测试程序

/销毁链表 //法1:先保留头节点,把后面的删完,最后删头结点 void Destroy_Method1(SLTNode * * pphead) {//链表为空,无需删除 assert(pphead);//先删后面,最后删头 while((* pphead) -> next) {free(next);

2023-08-03 19:33:07 235 4

原创 数据结构之动态顺序表(附带完整程序)

int age;int height;} Student;//Student类型的数组 int length;//元素的有效个数 int listsize;//最多容纳多少个元素 } SqList;5int age;int height;} Student;//Student类型的数组 int length;//元素的有效个数 int listsize;//最多容纳多少个元素 } SqList;2int age;int height;} Student;

2023-07-26 19:50:28 764 21

原创 C动态内存分配

功能:申请一块空间参数:申请空间的字节数返回值:void∗∗类型的。申请成功,返回申请空间的起始位置;申请失败,返回NULL①参数:与free配合使用的某个动态内存分配函数所申请空间的起始位置②无返回值(free是如何做到精准释放的呢?其实申请了不止指定大小个空间,在这些空间之前还多申请了一部分空间来存放该空间大小,通过该指示信息从而达到精准释放空间,这些在底层实现,不会暴露出来)功能:在申请空间的基础上将申请到的每个字节都初始化为0参数一:开辟多少个空间num。

2023-07-26 15:44:11 208 10

原创 C语言文件操作(下)

功能:根据文件指针的位置和偏移量来定位文件指针参数一:流,从而控制要进行操作的文件参数二:offset,偏移量,以字节为单位,正数表示正向偏移,负数表示负向参数三:初始位置,有三种:文件起始点(SEEK_SET)、当下点(SEEK_CUR)、文件末尾(SEEK_END),这三个位置点可以分别被0、1、2代替返回值:操作成功返回0,操作失败(比如offset超过文件自身大小)返回非0(有的编译器返回-1)

2023-07-21 20:53:16 84 10

原创 C语言文件操作(上)

1.使用文件的意义:将数据直接存放在电脑的硬盘上,做到了数据的持久化。2.文件分为程序文件(包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe))和数据文件(文件的内容不一定是程序,而是程序运行时读写的数据)。3.文件名包含3部分:文件路径+文件名主干+文件后缀。一个路径下只能不能有相同的文件名,否则无法起到标识作用。例如: c:\code\test.txt(c:\code\为文件路径;test为文件名主干;

2023-07-18 23:29:39 257 18

原创 内存操作函数memcpy、memmove、memcmp、memset

和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。用memmove函数实现重叠部分复制int i = 0;for(i = 0;功能:比较从ptr1和ptr2指针开始的num个字节返回值:用memcmp比较两字符串int n;if(n > 0) printf("'%s' 大于 '%s'.\n" , buffer1 , buffer2);

2023-07-15 21:40:31 253 11

原创 自定义类型:结构体,位段,枚举,联合体

①结构体的内存对齐是拿空间来换取时间的做法。②在设计结构体的时候,我们既要满足对齐,又要节省空间,让占用空间小的成员尽量集中在一起。👻例:枚举性别。enum Sex //性别 {👻其中enum Sex是枚举类型;MALE、FEMALE、SECRET是枚举常量,每个枚举常量有对应的数字(代号)☀️1.枚举里面列出开的是枚举的可能情况(和结构体的区别)☀️2.枚举成员是有对应值的:(1)默认从0开始,向下一次递增1;(2)不想从0开始,可从任意数字开始,依次向下递增1;

2023-07-15 00:58:42 125 10

原创 用sizeof和strlen计算数组或指针大小

👻创建一个整型数组1.sizeof(数组名)表整个数组的大小。4*4=162.a表示首元素地址,a+0还是首元素地址。地址大小为4或8字节3.*a表示首元素,整型一维数组中每个元素都是4字节4.a+1表示跳过首元素,指向第二个元素地址。地址大小为4或8字节5.a[1]表示第二个元素,整型一维数组中每个元素都是4字节6.&a是整个数组的地址,地址大小为4或8字节7.sizeof(∗&a)–>sizeof(a)–>整个数组大小,4*4=16🌟∗和&互为逆运算,会抵消。

2023-07-13 20:17:34 2739 8

原创 处理字符和字符串的库函数及模拟实现

①参数是指针,计算的是该指针指向位置与后面离得最近的一个’\0’字符之间的字节数②计算的字符串要一’\0’结尾,否则会一直向后寻找’\0’字符,得到随机值③函数返回值类型是size_t,无符号类型两个指针类型的参数,第一个指针指向目的地地址,第二个指向被复制字符串首地址。源字符串必须以 ‘\0’ 结束。会将源字符串中的 ‘\0’ 拷贝到目标空间。目标空间必须足够大,以确保能存放源字符串。目标空间必须可变。

2023-07-13 20:02:40 82 6

原创 qsort函数用法,举例使用qsort函数

是库函数,使用时引用头文件,返回值类型为int,有四个参数,如下图。

2023-07-11 00:16:19 377 5

原创 C语言指针进阶

参数为函数指针(函数名),被用来调用该回调函数所指向的函数。

2023-07-09 23:31:01 209 9

空空如也

空空如也

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

TA关注的人

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