自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++:多态

重写确实发生在继承体系中,子类重写父类的虚函数。重定义通常指的是在派生类中定义一个与基类同名的成员,这可以发生在继承体系中,但它与重写不同,因为重写特指虚函数的覆盖。重载是发生在同一个类中的,它指的是在同一个作用域内使用相同的函数名但参数列表不同的函数。重载与继承体系无关,重载只能在一个范围内,不能在不同的类里。

2024-04-21 17:36:44 2182

原创 C++:继承

于是,为了方便对这些拥有相同属性的类做管理,以及减少代码带来的冗余,就将这些相同的属性全部提取出来,放在了一个类 person 中,将person作为父类,而减去了相同属性的各个类,则变成了子类,内部只存放着自己独特的属性,而那些原先相同的属性则以继承父类的方式进行获取。如图所示,父类和子类的成员可以重名,因为它们都是独立作用域,所以它们的成员可以同名,但是子类的成员和父类的成员同名后,编译器会遵循就近原则,在调用这个同名的成员时,会优先调用子类的这个成员。调用Print可以看到成员函数的复用。

2024-04-12 19:52:32 919 3

原创 Stack_经典例题_最小栈

在满足栈的特点的同时,还需要设计一个接口,就是获取栈内的最小元素!

2024-04-11 20:23:44 236

原创 模板的进阶

前提须知: 模板的本质其实就是传参,换言之,模板可以类比函数传参,二者的特性类似,但各有各的特点,可以通过函数传参来学习模板。以上面类模板代码为例,我们可以知道, template 中的 size_t N = 10 就算我们所讲的非类型模板参数。和其他模板参数不同的是,非类型模板参数 = 类型 + 常量 ,他的诞生也是为了让编译器在编译的过程中尽可能的省力,也让使用者可以更为方便和便捷的使用一个模板但却创造出更多的类。同时减少了代码的冗余,通过为不同

2024-04-11 19:38:38 554

原创 list的常用接口底层实现与介绍

自定义类型的完善 ,因为我们写的是一个自定义类型,所以读取*it后解决完后还是一个自定义类型的数据结构,所以需要在使用数据结构的写法,表明其中内部的数据即可!it->是需要进行拆解的,可以变成it.operator()->,这里其实是编译器的一种隐藏操作,之前的it++也是一种隐藏操作,可以变化为it.operator++()而it->_a1这里隐藏的是另一个-> ,也就是图中第二个->,第一个->是属于it的重载运算符标识!

2024-04-04 15:49:14 1283 3

原创 vector的简单介绍及常用接口的模拟实现

本篇博客是从底层角度来模拟实现STL的vector,在C++的学习过程中vector是一个非常重要的知识点,vector有多个接口,且每个接口的功能和接收参数都不一样,所以本篇将会重点介绍和讲解几个重要接口的常用方式,并将其进行模拟实现。vector 容器名储存int型的值 vector v;储存double型的值 vector v;储存string型的值 vector v;储存结构体或者类的值的值 vector v;

2024-03-30 15:06:27 564

原创 滑动窗口_水果成篮_C++

问题转化就是求最长的连续的子数组!而且这个数组只能有两种数字!

2024-03-28 15:32:27 540

原创 双指针算法_三数之和

给定一个整数数组 nums ,判断是否存在三元组nums[i]、nums[j]、nums[k],满足 i!=j 且 i!=k 且 j!=k也就是同一个位置只能选择一次!,且还要满足三个数相加等于0,同一个位置只能选择一次!答案中不可以包含重复的三元组、如下图所示,虽然有三组,但是其中两组虽然顺序不一样但是内部的数值是一样的也不行!

2024-03-28 15:08:12 306

原创 双指针算法_和为 s 的两个数_C++

输入一个的数组,和一个数字s,在数组中查找两个数,使得它们的和正好是数字s,如果有多对数字的和等于s,只需要任意输入一对即可。

2024-03-28 14:46:10 345

原创 进程与文件

1.对于每一种外部设备,它们都具有读写方法,而在之前的学习中我们知道,操作系统是需要通过驱动来对底层的硬件进行管理的,所以每一种外部设备的读写方法都即存在它们相对应的驱动之中。2.同时,每一个设备都会由操作系统创建一个数据结构 strcut file ,每次打开一个设备,操作系统就会开始创建一个strcut file。

2024-03-28 14:34:05 963

原创 双指针算法_盛水最多的容器

如图所示,一个数组内部存储的是高度,求数组中,能够组成最大容量的两个元素,需要注意的是容量是 高度*宽度,这里的宽度指的是两个数字之间的距离,且需要注意高度中,容量要变成最大容量和高度有关,两个数字中最小的那个 * 两个 数字之间的距离 =最大容量。先用指针指向左右两端,然后算出容量v1,随后使用左端的1进行查看是否和其他位置的数字计算出的容量比v1大,答案当然是没用,这是因为在高度不变(高度是1)的情况下变动了宽度(两个数字之间的距离),所以容量没用v1大。

2024-03-26 11:58:35 321

原创 双指针算法_快乐数

通过示例的图解可以看出,如果计算的过程中出现了1,那么就将会在1时进行持续的循环,使得变成一个1的循环,而如果在计算的过程中,没用出现1,则会在计算的过程中,得出某个结果和之前计算的结果一致,成为一个环状。所以最后可以得出,如果有出现1则会进入1的循环,如果没用出现1则一直循环都有1。 这题和判断链表是否有环很像!不过这里只要判断环里面的数字是否是1,所以可以采取判断链表是否有环的方法,使用快慢双指针。定义快慢指针的方法和判断链表循环的双指针方法一样,快指针每次移动两次,慢指针每次移动一次,当二者相遇时,判

2024-03-26 11:35:24 307

原创 Linux进程的管理和进程的状态

程序的一个执行实例 ,正在执行的程序等等 ——— 课本概念担当分配系统资源的实体,例如cpu时间,内存 -----内核的观点。

2024-03-23 14:26:13 712 2

原创 双指针算法_复写零

通过示例和双数组模拟操作的过程,我们可以得出结论,如果使用双指针从左到右进行0的复写,那么势必会覆盖数组原有的元素,所以双指针进行操作的方向必须改变,变成从右到左,从后向前!继续使用双指针的操作,我们将dest定义为最后一个需要复写的位置,当前这里没有找到最后一个需要复写的位置,所以初始位置这里变成-1的位置,cur则是查看是0还是非0让dest向前1步还是两步。cur遇到非0,dest向前一步!同时判断dest是否在数组的末端,不是则cur继续往前走!

2024-03-16 10:20:05 681 21

原创 双指针算法_移动零_

同时不能通过复制数组,开辟新的数组空间的情况下原地对数组进行操作。

2024-03-16 09:12:09 495 1

原创 冯诺依曼体系结构

在冯诺依曼体系的结构下,输入设备传输的数据先要进入存储器(一般指内存)中,带输入的数据传输完毕后,在由存储器中的数据交给cpu(运算器和控制器)进行处理,因为cpu的处理速度过快,所以数据非常快的就再度回到存储器中,最后在通过存储器将数据发送到输出设备上。当前计算机的核心工作原理主要是依据冯诺依曼架构的体系结构进行工作的,在冯诺依曼体系体系结构出现之前,普通的计算机的工作原理一般是:输入设备----->cpu------->输出设备。为什么要转移到存储器当中呢?冯诺依曼体系的意义是什么?

2024-03-16 08:27:00 336

原创 string 底层模拟实现常用接口

本篇博客是从底层角度来模拟实现STL的string,在C++的学习过程中string是一个非常重要的知识点,在之前的介绍讲解中,我们了解到string有多个接口,且每个接口的功能和接收参数都不一样,所以本篇将会重点介绍和讲解几个重要接口的常用方式。C++:string相关内容的简单介绍-CSDN博客什么是string?为什么要学习使用string?string的优势?

2024-03-09 11:42:36 810 2

原创 String 类 经典例题题集

计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)输入描述:输入一行,代表要计算的字符串,非空,长度小于5000。输出描述:输出一个整数,表示输入字符串最后一个单词的长度。

2024-03-05 18:15:09 562 1

原创 string 类 经典习题之数字字符相加

给定两个字符串形式的非负整数num1和num2,计算它们的和并同样以字符串形式返回。你不能使用任何內建的用于处理大整数的库(比如BigInteger), 也不能直接将输入的字符串转换为整数形式。

2024-02-29 18:28:45 330 4

原创 C++:string 相关接口的简单介绍

string是表示字符串的字符串类该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。string在底层实际是:basic_string模板类的别名,typedef basic_string string,所以string 在底层的本质上也是一个模板不能操作多字节或者变长字符的序列。在使用string类时,必须包含#include头文件以及using namespace std;

2024-02-28 15:35:46 834 3

原创 C++ :内存管理 new&delete

在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与 free不会。//类Aclass Apublic://类A的构造函数的初始化列表: _a(a)//类A的析构函数~A()private:int _a;int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数//使用了malloc进行空间的开辟,但是没有初始化操作。

2024-02-13 15:08:07 1161 18

原创 C++:友元函数与友元类

缺点:友元函数不是类的成员但是却具有成员的权限,可以访问类中受保护的成员,这破坏了类的封装特性和权限管控;优点:可以实现类之间的数据共享;比如上面互为友元类,则可以互相访问对方受保护的成员;总结:友元函数是一种破坏封装特性的机制,可以让程序员写代码更灵活,但是不能滥用;

2024-02-12 14:21:10 445 1

原创 C++: const 的 权限放大缩小!

关于权限的放大和缩小问题,在文件领域讲诉可以理解为,当某个文件具有读取权限时,我们赋予这个文件读写权限,这个过程叫做权限的放大,而反之,当某个文件同时,但是我们了它,这就叫做而将权限放大缩小放在C++的指针和引用中,便是变量的数值是否能够修改的问题,如果将变量的数值从可以修改变到不能修改,则是权限的缩小,而将变量的数值从,则是但是在指针和引用中,权限放大是不可取的!

2024-02-11 16:21:41 875 4

原创 Linux: GDB 调试工具

Linux GDB(GNU Debugger)是一个功能强大的调试工具,用于调试C、C++等编程语言的程序。它可以帮助开发人员定位和修复程序中的错误。

2024-02-11 14:35:13 1085

原创 C++: 模板初阶

在下列函数中,它们都是swap函数,但是却因为参数的不同和而导致了需要使用函数重载进行实现,虽然解决了问题,但是函数重载也有不好的地方:1. 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函 数2. 代码的可维护性比较低,一个出错可能所有的重载均出错那能否告诉编译器一个模子,让编译器根据不同的类型利用该模子来生成代码呢?

2024-02-07 15:11:19 473 9

原创 C++:类的简单介绍(六)——初始化列表

1. 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)引用成员变量const成员变量自定义类型成员(且该类没有默认构造函数时)除了以上三类,其他的成员变量在初始化列表或者在函数体({}内部的)的使用影响都不是很大!但是还是建议使用初始化列表。

2024-02-05 14:42:25 1116 5

原创 C++ : 类的简单介绍(五)————— 拷贝构造函数 & 函数传参 & 运算符重载

又如上图所示,如果进行传值,那么在传值交给拷贝函数的同时,在逻辑上也相当于是传值调用了拷贝构造函数,而C++的传值原理就是要把传递的数值先给到构造函数。于是乎就有了一种现象,一个数值在传递给拷贝构造之前,要先进入另一个拷贝构造函数内部进行拷贝,然后传回返回值,但是在进入另一个拷贝构造函数前,上面的现象又会出现,而这种现象就是无穷递归。

2024-02-01 16:21:53 1110 33

原创 C++ : 类的简单介绍(四)——析构函数

析构函数的功能类似于 栈、链表、队列的distroy的功能,用来进行内部空间的清理和释放,而于这些数据结构的distory 功能不同,在有了析构函数栈之后,这些数据结构,就不需要再写distorty 因为析构函数会在这是变量结束后自动进入清理模式。5.编译器默认生成的析构函数和构造函数一样,不会处理内置类型,对于自定义类型会去它们的内部调用它们的析构函数。与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由 编译器完成的。而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。

2024-01-31 16:20:03 263 5

原创 C++: 类的简单介绍(三)———构造函数的初步认识

就如上面代码所示,图中没有构造函数的出现,编译器自己生成了一个构造函数,而后主函数内定义了一个构造函数 对象 d1 ,d1调用了成员函数 print ,而print 内部的内置类型函数,被编译器生成的默认构造函数赋予了一堆乱七八糟的随机值。在不写构造函数的时候,定义了一个构造函数的对象,同时编译器会自动生成一个默认的构造函数,同时调用了使用对象调用 成员函数 而得到的反馈缺是一堆随机值,就如下图的代码所示。默认的构造函数总共有三种:全缺省构造函数,无参数构造函数,因为没有构造函数编译器自己生成的构造函数。

2024-01-31 16:03:04 497

原创 C++ :类的简单介绍(二) ——this指针

对于上述类,有这样的一个问题: Date类中有 Init 与 Print 两个成员函数,函数体中没有关于不同对象的区分,那当d1调用 Init 函 数时,该函数是如何知道应该设置d1对象,而不是设置d2对象呢?根据之前的博文,我们得知了类中的成员函数是处在一个公共的区域,类中的成员变量仅仅只是声明,只有在主函数内部定义了 以类为类型的变量,才算是开辟了成员变量的空间。同时,在成员函数内部的成员变量,也同类中的成员变量一样,仅仅只是一个声明。

2024-01-31 15:12:38 487 1

原创 Linux:进度条的创建

在创建进度条之前,首先要明白两个工具,fflush 和 \r。

2024-01-30 15:28:28 1401 8

原创 C++:类 的简单介绍(一)

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

2024-01-28 17:38:25 1919 27

原创 C++:auto 关键字 & 范围for

于是就有了auto关键字,C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一 个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。2、当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译 器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。5、虽然在最新版本的C++中,auto可以作为返回值的返沪类型使用,但是还是不太建议使用auto作为返回类型的。1. for循环迭代的范围必须是确定的。

2024-01-28 16:30:13 1055 17

原创 C++: 内联函数

因为宏的本质上是替换,所以对于需要替换的内容十分的严谨,倘若一步错,则步步错,所以对于宏而言,内联函数其实是更加完善的,可以说内联函数其实是完善了宏的问题,解决了宏的缺点。实际上,内联函数使用的场景并不是很多,很多时候内联函数只是也只能使用在较为小型的函数当中,如果是较为大型或者调用函数的次数非常多时,内联函数就会导致函数膨胀问题的发生!以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调 用建立栈帧的开销,内联函数提升程序运行的效率。

2024-01-28 15:46:11 1017 20

原创 C++:引用

引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空 间,它和它引用的变量共用同一块内存空间。如上代码所示,引用符是&,但是要和C语言中的&区分,如上代码就第一个&是c++的,而第二个是C语言的 ,且我们开辟了一个空间,它叫做a ,同时他又叫做b,二者的空间地址都是一样的。取别名的同时还可以给别名取别名!这就相当于把李逵叫铁牛的同时,又把李逵叫做黑旋风。

2024-01-27 15:35:56 769 10

原创 C++:缺省参数&函数重载

而后通过Linux的翻译工作原理我们可以知道,编译器在执行代码之前会执行四个步骤,分别是:预处理、编译、汇编、链接。其中,在预处理阶段,函数定义中包含的头文件,会将头文件的内容完全展开并复制在定义代码的上方。其次,在链接阶段,函数定义中的代码会变成一串机器代码以便编译器进行执行,而这一串机器代码在形成的过程中会将这一大串代码的首个元素的地址,发送到一共特点的函数中,最后这个函数同样会形成一个地址,发送到函数声明中,由函数声明调用。

2024-01-25 15:48:29 1067 14

原创 Linux: make/Makefile 相关的知识

同时在执行的过程中,make会检测这个目标文件是否有必要进行执行,就比如:执行的目标文件是clean,文件的依赖方法是清除某一个指定的文件,当这个文件清除后,再次使用make进行执行时,make会发出提示,因为他找不到要删除的文件了。如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到mytest这个文件, 并把这个文件作为最终的目标文件,进行执行。因为make 是默认执行makefile中的第一个目标文件,若想要执行其他的目标文件则需要 make 目标文件名 即可。

2024-01-24 16:05:40 822 23

原创 Linux:gcc的相关知识

在Linux中,如果需要将一个C语言文件变得可以执行,那么除了这个文件本身的内容是C语言编写的内容外,还需要gcc这个编译工具进行编译才行。gcc的翻译过程总共可以分为四步,分别是预处理、编译、汇编、链接。gcc 是一个将C语言文件变成可执行文件的工具。

2024-01-24 15:35:25 1199 12

原创 Linux:vim的相关知识

在vim中,最为常见的有三种模式,分别是:命令模式(command mode)、插 入模式(Insert mode)和底行模式(last line mode)文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。在命令模式下,shift+: 即可进入该模 式。在进入vim后,使用 i 进入插入模式,插入模式就是vim的编辑模式,可以在vim中进行内容的编辑和修改。vim的核心模式,使用vim进入文件编辑时的最初模式,在该模式中只能移动光标和使用命令对文件内容进行编辑。

2024-01-23 16:09:39 1517 20

原创 C++ :命名空间域

结果显而易见,因为rand在stdlib.h中是一个函数,所以在使用stdlib.h将程序进行扩展后,你命名的变量极有可能会因为和函数名重复,而造成冲突,但我们又不明白那些是函数,那些又不是函数,所以,这个问题一直是C语言的不足之处!这其实和编译器的工作原理有关,编译器在查看到变量的存在的同时,会在局部区域内搜寻变量的存在,若该变量不存在于局部区域,编译器则会从全局的范围内搜寻变量是否存在,如果还是不存在,则编译器发生报错。但是,命名空间的写法不是很方便,而且每次使用的时候都需要加上::和空间的名字。

2024-01-21 15:07:37 3912 27

C++ 类与对象之日期类的创建代码解析

正对于使用了C++的运算符重载和析构函数、构造函数以及日期类之间的相关计算,主要内容包含了:获取某年某月的天数,日期减去日期获得的日期差,日期的加减天数得到的日期,日期之间的大小比较。 主要使用的运算符重载包括了大于小于,大于等于,小于等于,等于,以及赋值符号,+=符号 , -=符号,以及前置++后置++前置--后置--符号

2024-02-21

C++ 类与对象之日期类的创建主要代码

使用的是C++的类与对象、运算符重载、构造函数、析构函数等知识创建了一个有关于获取某年某月天数、某年某月某日之间的日期大小等于的对比,以及某年某月某日增加某天数的日期类、内容包括有增加天数、减少天数,日期减去日期的算法

2024-02-21

排序:非递归的归并排序

归并排序的非递归排序的代码解析

2024-01-19

JAVA:乘除窗体的实现

乘除窗体的实现

2023-12-14

JAVA:注册表窗口的实现

JAVA的注册窗体实现的代码

2023-12-14

JAVA:注册表窗口的实现

JAVA的注册窗体实现的代码

2023-12-14

JAVA:注册表窗口的实现

JAVA的注册窗体实现的代码

2023-12-14

空空如也

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

TA关注的人

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