自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++多态

多态是不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件:🍊1.必须通过基类(父类)的指针或者引用去调用虚函数🍊2.被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写1.重载(Overloading)重载是指在同一个作用域内(通常是在同一个类中, 也可以是在全局作用域下),存在多个同名函数但它们的参数列表不同(参数的个数、类型或者顺序不同)。

2025-04-13 17:28:07 991

原创 C++继承

继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称为派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。public:protected:// 姓名// 年龄public:protected:int _stuid;//学号protected:int _jobid;//工号/*

2025-04-13 17:26:05 589

原创 C++STL简介

STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

2025-04-13 17:18:44 354

原创 C++模版(进阶)

一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。🍋【优点】1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性🍊【缺陷】1. 模板会导致代码膨胀(针对不同的类型会实例化出一份类型或函数)问题,也会导致编译时间变长3. 出现模板编译错误时,错误信息非常凌乱,不易定位错误。

2025-03-18 21:48:10 1284

原创 C++反向迭代器

还需要注意的是:正向迭代器的begin()和end()作为reverse_itertor或者const_reverse_iterator的参数时,如果使用重载的- -的话可能会出现问题:比如- -end()或者end()- -做反向迭代器的参数的话,由于end()是一个Iterator类型的迭代器,并且end()是一个临时对象;跟我们自己实现的反向迭代器有所差异,它反向的rbegin()就是正向的end(),反向的rend()就是正向的begin()。那标准库中的反向迭代器是怎么实现的呢?

2025-03-18 21:47:32 827

原创 C++优先级队列priority_queue、仿函数

1.优先级队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。2.优先级队列类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先级队列中位于顶部的元素)。3.优先级队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部“弹出,其称为优先级队列的顶部。4.底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。容器应该可以通过随机访问迭代器访问,并支持以下操作。

2025-03-18 21:45:09 1206

原创 C++stack和queue

stack的文档介绍1.stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。2.stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。3.stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:○ empty:判空操作○ back:获取尾部元素操作。

2025-03-14 08:50:25 757

原创 C++list类

list的文档介绍1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代2.list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3.list与forward_list非常相似: 最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。4.与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。

2025-03-14 08:49:59 905

原创 C++vector类

(1) vector是表示可变大小数组的序列容器。(2) 就像数组一样,vector也采用连续的存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。(vector其实就是顺序表(3) 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入的时候,这个数组需要被重新分配大小,为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组中。

2025-03-10 21:01:43 1127

原创 C++string类

🔥在C++中,迭代器(lterator)是用于访问和遍历容器(如vector、list、map等)元素的核心工具,其本质是一个类似指针的对象,但提供了更统一的抽象接口,能够屏蔽不同容器的底层实现细节。(1) 迭代器的核心特性1.功能定义迭代器通过指针式的操作(如递增、解引用等)访问容器元素,通常支持以下基本操作:● 指向容器中的元素(类似指针)。● 通过++或 – 移动位置(支持单向或双向移动,取决于迭代器类型● 通过*操作符访问或修改元素值。2.核心作用。

2025-03-10 20:48:07 764

原创 C++模版(初阶)

class 类模板名// 类内成员定义public:_size = 0;_size++;//使用析构函数演示:在类中声明,在类外定义~Stack();//注意:类模板中函数放在类外进行定义时,需要加模板参数列表。

2025-02-27 10:43:04 580

原创 C++内存管理

因为在C语言中是没有构造和析构函数的,所以malloc/free在C++中没有办法很好的支持动态申请的自定义类型对象的初始化和清理工作。所以C++中引入了new和delete。new/delete和malloc/free最大的区别就是: new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数。int main()//自定义类型,开空间+调用构造函数初始化free(p1);

2025-02-27 10:38:15 758

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

且该类没有默认构造函数时。

2025-02-24 15:11:43 893

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

无参。

2025-02-24 15:11:22 1313

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

/类体:由成员函数和成员变量组成//一定要注意后面的分号class为定义类的关键字,ClassName为类的名字(自定义),{}中为类的主体,注意类定义结束时后面的分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。类的两种定义方式:1.声明和定义全部放在类体中,需注意: 成员函数如果在类中定义,编译器可能会将其当成内联函数处理。2.类声明放在.h文件中,成员函数的定义放在.cpp文件中。

2025-02-24 15:09:12 745

原创 C++入门(关键字、命名空间、输入输出、缺省参数等)

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字(自定义),然后接一对{}即可,{}中即为命名空间的成员。//1.正常的命名空间定义//S是命名空间的名字,一般开发中使用项目名字做命名空间名//命名空间中可以定义变量/函数/类型int val;//2.命名空间可以嵌套//test.cppint a;int b;int c;int d;//3.同一个工程中允许存在多个相同名称的命名空间//编译器最后会合成在同一个命名空间中。

2025-02-16 15:39:24 823

原创 启程C++

🍑C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机,20世纪80年代,计算机界提出了OOP(obiect oriented programming: 面向对象)思想,支持面向对象的程序设计语言应运而生。🍑1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。

2025-02-16 15:38:45 815

原创 排序--四种算法

希尔排序的时间复杂度不好计算,因为 gap 的取值很多,导致很难去计算,因此很多书中给出的希尔排序的时间复杂度都不固定。

2025-02-13 10:54:25 1220

原创 数据结构-二叉树经典OJ题

🍃输入型参数:在函数调用时传递给函数的值,不应在函数内部被修改。🍃输出型参数:通过指针传递变量的地址,函数内部可以修改这个变量的值,从而影响函数外部的变量。这在需要从函数返回多个值或者需要修改外部变量时非常有用。理解这两种参数的差异和用法对于编写高效、清晰的C语言代码至关重要。

2025-02-13 10:54:02 1123

原创 数据结构-链式二叉树

计算二叉树第K层的节点,这里需要加入一个参数k才能实现,因为我们不知道递归什么时候会到达第k层,所以传一个参数k,让它每递推一次就递减1,若根节点为第一层,则k递减到1就到达第k层了(递推终止条件)。设二叉树的根结点所在层数为1,层序遍历就是从所在二叉树的根结点出发,首先访问第一层的树根结点,然后从左到右访问第2层上的结点,接着是第三层的结点,以此类推;没有孩子节点的节点就是叶子节点,所以递推结束的条件就是:该节点的左右子树为空就返回1,即把该叶子节点的数量计上。而一开始的判空其实针对对根节点而言的。

2025-02-12 19:23:49 1139

原创 数据结构-二叉树-堆

◆。

2025-02-12 19:19:26 989

原创 数据结构-栈&队列OJ题

MyStack的成员不是队列指针,而是队列结构体变量,所以在myStackCreake中为MyStack动态开辟的空间大小是为两个队列结构体变量开辟的,这样做的好处是可以取q1和q2的地址,方便我们直接可以修改队列q1和q2。此时再入数据就要从rear的位置入,问题是入了数据后,rear+1就出了数组的下标范围,我们应该让rear回到0下标的位置才能真正实现循环队列:(注意:k是题目要求存储的元素个数)这道题是要用队列来实现栈,首先我们要了解到队列的性质是先进先出,而栈的性质是后进先出。

2025-01-17 17:48:25 2559

原创 数据结构-栈和队列

inttop;//空间容量}ST;arr就是待开辟空间的指针。top可以有两种选择:一种是指向栈顶元素,另一种就是指向栈顶元素的下一个位置。STst;//1.节点结构}QNode;//2.队列结构intsize;}Queue;队列的结构中只有三个成员,phead是用来指向链表的头的,ptail是用来指向链表的尾的。因为队列是先进先出的特点,所以链式队列是在队头出数据,在队尾进数据。有了phead和ptail指针就方便我们管理链表。size是链表的元素个数(节点个数)。

2025-01-17 17:09:13 1187

原创 数据结构-顺序表&链表经典OJ题

●。

2025-01-15 19:09:29 1353

原创 数据结构-顺序表及链表结构分析

但是需要注意:由于链表中至少是有哨兵位节点的,所以pos位置理论上是不会找到头结点的,因为LTFind函数是自己封装的,自己能清楚地知道能不能找到某个节点位置,且不会找到哨兵位节点,因为在LTFind函数里断言过不能找哨兵位这个节点。注意:在删除pos节点后面的节点时,pos节点的下一个节点不能是哨兵位,不能删除链表中的哨兵位节点。在指定位置插入数据,即在指定数据的前面插入数据,也要涉及挪动数据,比如上面图:在下标为2的位置插入一个数据,就要把pos位置及以后的数据整体往后挪一位,需要注意循环的结束条件。

2025-01-15 18:55:12 887

原创 数据结构-双向链表

注意:上面的方法需要一个一个单独地进行调试,确保没有bug后,再进行下一个方法的测试。对于上面双向链表的各种增删查改操作函数的参数除了初始化链表的函数LTInit1传的是二级指针,其他函数都是传一级指针,这样做是为了保持接口的一致性,减少记忆的成本。🍛🍛注意:这里的"带头"跟前面我们说的"头节点"是两个概念!实际在前面的单链表阶段的称呼不严谨,但是为了能更好的理解就直接称为单链表的头节点。带头链表里的头节点,实际为"",哨兵位节点不存储任何有效元素,只是在这里"放哨"。双向带头循环链表(双向链表)

2025-01-06 16:22:13 1131

原创 数据结构-单链表

这里所讲的单链表全称是:🍎。

2025-01-06 16:08:47 968

原创 数据结构-顺序表及其应用

数据结构是由“数据”和“结构”两词组合而来的。🍉什么是数据?常见的数值1、2、3、4、教务系统里保存的用户信息(姓名、性别、年龄、学历等等)、网页里肉眼可以看到的信息(文字、图片、视频等等),这些都是数据。🍉什么是结构?当我们想要使用大量同一类型的数据时,通过手动定义大量的独立变量对于程序来说,可读性非常差,我们可以借助数组这样的数据结构将大量的数据组织在一起,结构也可以理解为组织数据的方式。

2025-01-01 11:32:01 794

原创 数据结构-时间&空间复杂度

🍋算法(algorithm)是指解题方案的准确而完整的描述,它是解决一系列问题的清晰指令。也就是,能对一定规范的输入,在有限的时间内获得所要求的输出。简单来说,算法就是解决一个问题的具体方法和步骤。算法是程序的灵魂。🥑Ⅰ.确定性:算法的每一步骤都应该是明确的,对于相同的输入必须得出相同的输出结果。🥑Ⅱ.有限性:算法应该在有限的步骤后结束,不能无限地循环下去。🥑Ⅲ.输入和输出:算法通常需要输入数据,并产生输出结果。

2025-01-01 11:30:40 808

原创 C语言实现贪吃蛇游戏

🍅🍅🍅本次实现贪吃蛇会使用到的一些Win32 API知识,接下来我们就学习一下。

2025-01-01 00:24:35 2634 1

原创 C语言函数栈帧的创建和销毁

函数栈帧是指函数被调用时,系统为该函数在栈(Stack)区开辟的一段内存空间。栈区是一种后进先出(Lsat In First Out)的数据结构,后面会学习数据结构的相关知识。🍆🍆🍆需要注意:函数栈帧、局部变量的开辟是在栈区上开辟的,而全局变量、静态变量是在堆上创建的,要注意区分。我们就可以逐一回答上面提出的一些问题:当局部变量不初始化时,内存中存储的就是像CCCCCCCC这样的随机值。函数的传参也是通过压栈的方式将实参的值压入栈里,所以我们使用的形参其实就是实参的一份临时拷贝。

2025-01-01 00:11:07 1068 1

原创 C语言语句、语句分类及注释

即使有了操作符的优先级和结合性,我们写出的表达式依然有可能不能通过操作符的属性唯一确定表达式的计算路径,那这个表达式就是存在潜在风险的,建议大家不要写出特别复杂的表达式。

2024-09-27 22:58:22 1159 2

原创 C语言VS实用调试技巧

🍎bug本意是 “昆虫” 或 “虫子”,现在一般是指在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题,简称程序漏洞。“Bug”的创始人格蕾丝·赫柏(Grace Murray Hopper),她是一位从事美国海军工作的电脑专家,1947年9月9日,格蕾丝·赫柏对Harvard Markll设置好17000个继电器进行编程后,技术人员正在进行整机运行时,它突然停止了工作。

2024-09-27 22:57:57 1461

原创 C语言字符函数和字符串函数

文章目录一、字符分类函数1.islower函数二、字符转换函数三、字符串函数1.strlen函数strlen函数的模拟实现2.strcpy函数3.strcat函数4.strcmp函数5.strncpy、strncat、strncmp函数Ⅰ.strncpy函数Ⅱ.strncat函数Ⅲ.strncmp函数6.strstr函数strstr函数的模拟实现7.strtok函数8.strerror函数四、perror函数一、字符分类函数C语言中有一系列的函数是专门用来做字符分类的,也就是一个字符它是属于什么类型的字

2024-09-23 15:44:46 1237

原创 C语言内存函数

仔细想一下,就能知道当把1、2先拷贝放到arr+2和arr+3的地址处,其实原来数组的3和4就被1和2覆盖了,所以之后再来拷贝arr1+2和arr1+3地址处的元素到arr1+4和arr1+5所指向的空间其实也是拷贝了1和 2。时,还是上面假设的数组,如果现在目标空间的地址为arr+2,源空间的地址为arr,要将这个数组中的1,2,3,4,5拷贝放到3,4,5,6,7的位置,那么可以。当目标空间的地址dest小于源空间的地址src时,用从前向后的方式进行拷贝,可以避免源空间里要拷贝的数据被覆盖。

2024-09-23 15:23:24 978

原创 C语言数据类型、变量及数据类型的长度、取值范围

C语言提供了丰富的数据类型来描述生活中的各种数据。使用整型类型来描述整数,使用字符类型来描述字符,使用浮点型类型来描述小数。所谓“类型”, 就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据。

2024-09-12 22:55:05 1559

原创 C语言浮点数在内存中的存储

🍑对于32位的浮点数(float),最高的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M。当S=0,V为正数;🍧M 表示有效数字。M是大于等于1,小于2的。

2024-09-12 22:37:39 1151

原创 C语言编译和链接

重定位。

2024-09-05 22:02:54 620

原创 C语言预处理详解

C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的。1 _ _FILE_ _ //进行编译的源文件2 _ _LINE_ _ //文件当前的行号3 _ _DATE_ _ //文件被编译的日期4 _ _TIME_ _ //文件被编译的时间5 _ _STDC_ _ //如果编译器遵循ANSI C,其值为1,否则未定义1int main()return 0;

2024-09-05 22:02:14 1169

原创 C语言文件操作、流、缓冲区

🥑存储在硬盘上的数据信息集合就叫做文件(file),也称为计算机文件。而且文件是以硬盘作为载体的,文件有多种类型,比如文本文件(.txt)、图片(.jpg)、压缩文件(.zip)、Excel电子表格(.xls)等等。程序文件数据文件(从文件功能的角度来分类的)。上面表格中说的适用于所有输入流一般指适用于标准输入流和其他输入流(如文件输入流);所有输出流一般指适用于标准输出流和其他输出流(如文件输出流)。int main()//打开文件return 1;//写文件ch

2024-08-19 22:30:43 1110

空空如也

空空如也

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

TA关注的人

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