自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++】多态(上) 多态 | 虚函数 | 重写 | final、override | 接口继承与实现继承 | 抽象类

若子类定义了一个和父类的虚函数 一模一样的虚函数,那么称子类中的虚函数重写 / 覆盖了父类的虚函数。(拥有相同的名字、返回值、形参列表)重写是针对虚函数的概念。普通函数是没有重写的说法的。

2023-11-27 22:19:57 1307

原创 【C++】继承(下) 单继承 | 多继承 | 菱形继承 | 继承和组合

这里说明下 优先用组合 的原因:继承是一种白箱复用。所谓白箱复用,就是透明可视化的一种复用,父类的内部细节对子类可见。这在一定程度上破坏了父类的封装。并且,父类和子类的依赖关系很强,耦合度很高。试想,假如父类的某个成员被修改了,那在所有的子类中也会遭到修改。而组合是一种黑箱复用。黑箱复用是另一种

2023-11-27 22:08:47 1064

原创 【C++】继承(上) 继承的基本概念 | 子类的默认成员函数

在继承体系中子类和父类都有独立的作用域。如果子类和父类中有同名成员,子类成员将屏蔽 父类的同名成员 的直接访问,这种情况叫隐藏,也叫重定义。string tele="Person中的tele";public:string tele="Student中的tele";Student s;s.Print();//此时从Person中继承来的tele被隐藏return 0;但隐藏并不是删除,从父类那里继承来的同名成员 依然存在于子类中。

2023-11-21 14:47:23 243

原创 char*与char[]的区别

之前在给函数传形参时,char*和char[]我是混着用的,当时感觉它俩用起来没啥差别,就草率地把它俩混为一谈。但实际上,这俩本质是不同的,只是在作为形参的时候可以互换使用。我这篇博客就是来记录下它俩的区别。

2023-11-21 13:02:18 217

原创 【stack题解】逆波兰表达式求值 | 用队列实现栈

平常使用的算式则是一种中缀表达式,如 ( 1 + 2 ) * ( 3 + 4 )。删除的话,把 末尾元素之前的全部元素 出队,再重新入队,这样,队列的首元素就是栈顶元素了。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。而中缀表达式并不适合计算机去计算,计算机是从左往右读取值的:1 + 10 / 5,这样计算的结果就是11/5=2。我们平时写的算式是这样的:1+10/5,这是一种中缀表达式,即运算符在中间,操作数在两边。

2023-11-13 13:32:59 200

原创 【C++】非类型模板参数 | array容器 | 模板特化 | 模板为什么不能分离编译

1.模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2.增强了代码的灵活性1.模板会导致代码膨胀问题,也会导致编译时间变长2.出现模板编译错误时,错误信息非常凌乱,不易定位错误。

2023-11-12 14:39:53 203

原创 【vector题解】连续子数组的最大和 | 数组中出现次数超过一次的数字

因为没有额外的空间去记录每个数据的次数,所以我遍历的时候就要判断次数是否> len/2。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组,子数组最小长度为1。遍历时,设一个记录次数的count,遍历一遍,前后相同就用count++来计数。计算机拿到这个数组,就是把它从头到尾遍历,那我要做的,就是在遍历过程中,怎么找到最大和。给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

2023-11-10 00:52:26 119

原创 【C++】stack | queue | priority_queue | deque

1.队列是一种特殊的线性表,它只能在队尾插入数据,队头出数据,这一模式被称为“先进先出”或FIFO(first in first out)。2.从底层实现来看,queue也是作为容器适配器被实现的。展示下queue简易版的底层实现:底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支持以下操作:empty:检测队列是否为空size:返回队列中有效元素的个数front:返回队头元素的引用back:返回队尾元素的引用push_back:在队列尾部入队列。

2023-11-09 00:22:36 264

原创 【stack题解】最小栈 | 栈的压入、弹出序列

例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。首先我们要明白一件事:栈的元素是可以在中途弹出的,比如[1,2,3,4,5],它的弹出顺序也可以是[1,2,3,4,5]:把1压入再弹出,再把2压入弹出,把3压入弹出……一开始我是这么写的,当测试用例为[2,1,0],[1,2,0]时,程序报段错误。而[4,3,5,1,2]就不行,我们模拟一下入栈、出栈的顺序就会发现,2一定是在1之前出栈的。

2023-11-06 16:15:53 63

原创 【vector题解】只出现一次的数字 | 电话号码的数字组合

而如果传值传参,每个栈帧里的unit_ret都是拷贝出来的值,当栈帧销毁,拷贝的unit_ret也就销毁了,而实际的unit_ret不受影响。写法一:unit_ret+c的结果 作为新的unit_ret参数,传给下一个调用的combine_letter函数,而实际上,unit_ret的值并。我以为,先是找到2对应的a,给a开个栈帧,在此栈帧里找到3对应的d,给d开栈帧,然后再开新栈帧;在栈帧2号里,di ==2,开栈帧3号。所以,一共开3次栈帧2号,每个栈帧2号里又要开3次栈帧3号,一共开9次栈帧3号。

2023-11-02 11:00:31 591

原创 【vector题解】杨辉三角 | 删除有序数组中的重复项 | 只出现一次的数字Ⅱ

至于杨辉三角的表示法,它的规律是:每行的开头和末尾为1,其他的数之间的关系 用找规律法可以得出:v[i] [j]=v[i-1] [j-1] + v[i-1] [j]这题其实可以借鉴刚刚那道“删除数组中的重复项”,把乱序的数组排序,使得大小相同的数字紧挨在一起,当一个数和前后都不相同,那这个数就只出现了一次。这道题乍一看,长得像单身狗问题,但实际并不能用异或的方法去做,两个相同的值异或在一起为0,而这里是三个相同的值。此时将十进制的数字用二进制的视角来看的话,32个比特位,1出现的次数一定是3的倍数。

2023-10-26 22:47:43 174

原创 【C++】list的介绍及使用 | 模拟实现list | 对比vector和list

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

2023-10-26 12:04:58 638

原创 用C++写个简单的程序表白老妈

后天就是老妈的生日了,我打算写一个简单的程序表白老妈子,来肉麻一下她。在实现的过程中,有不少我没学过的知识,这些知识我都会予以补充。

2023-10-25 16:57:11 137

原创 【string题解 C++】翻转字符串II:区间部分翻转 | 验证回文串

难度:简单给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

2023-10-15 13:29:21 216

原创 【string题解 C++】字符串相乘 | 翻转字符串III:翻转单词

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。然后就是要注意,大while()里包小while(),小while()加上大while()的判断条件,会更安全,不容易越界。写上的,后面得把这个循环多写几遍,多体会一下。思路2则不用遍历字符串的每一个字符,而是用find找到空格,,然后从空格的后一个 接着去找 下一个空格。因为两数相乘,乘积的位数 是不会超过 被乘数的位数之和的,所以这个大小一定够用了。

2023-10-13 21:30:31 294

原创 【C++】vector的模拟实现 | 使用memcpy拷贝时的问题 | 实现深拷贝 | 迭代器失效问题

上一篇我们说到了vector,它是一个类模板,能够容纳各种类型的对象作为其元素,并且可以动态地调整大小。可以理解为动态数组。这篇我们就亲自实现一下 简易版的vector,这能大大加深我们对vector的理解!而因为vector的实现和string有很多相似之处,所以实现过程中的一些细节便不再详述。

2023-10-06 15:43:23 369

原创 【C++】vector的介绍 | 常见接口的使用

vector是一个类模板。它能够容纳各种类型的对象作为其元素,并且可以动态地调整大小。可以理解为动态数组。它像数组,又不像。vector也采用的连续存储空间来存储元素。这意味着可以采用下标对vector的元素进行访问,和数组一样高效。它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质来说,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小,为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。

2023-09-29 14:46:42 143

原创 【C++】STL中string类的实现

在C语言中,使用printf直接输出string类型的字符串可能会出现乱码。这是因为printf函数的%s格式化符号期望传入一个char类型的参数,而string类型的字符串实际上是一个对象,不是一个字符指针。所以在使用printf输出string类型的字符串时,应该使用s.c_str()方法将string类型转换为char类型。而在C++中,使用cout输出string类型的字符串是没有问题的。cout对string类型有特殊的处理方式,可以直接输出string类型的字符串。

2023-09-26 13:25:56 193 1

原创 【C++】STL简介 | string类的常用接口

全称为Standard Template Library(标准模板库),是C++标准库的重要组成部分。它不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。通俗来说,STL就是将常见的数据结构(如顺序表,链表,栈,队列,二叉树,哈希等)以模板的形式进行封装,使用时,不用人为再去写,可以直接调用。并且,一些常见的通用的算法也不用自己实现,可以直接从STL调用。

2023-09-18 21:58:14 130

原创 【C++】泛型编程 | 函数模板 | 类模板

泛型编程是啥?编写一种一般化的、可通用的算法出来,是代码复用的一种手段。类似写一个模板出来,不同的情况,我们都可以往这个模板上去套。这是一个交换函数。如果很多不同类型的数据需要交换,咋办?函数重载?函数重载的确可以解决,但是每多一种数据,都要实现对应的重载函数。实在太麻烦了。我们想要的是:有一个一般化的模板,不管是什么类型,往这个模板函数上套用就行。这就是泛型编程的思想。结果:接下来我们具体介绍如何使用泛型编程。

2023-09-13 18:40:01 215 7

原创 【C++】C++动态内存管理

我们的代码并非放在代码段里的,而是以文件的形式存在磁盘上的。代码经过编译链接形成的二进制指令,才是放进代码段里的。(即可执行代码) “abcd”如果没有被const修饰,那是放在栈区的。经过const修饰为只读常量后,放在代码段。

2023-09-08 10:50:07 172 3

原创 【C++】拷贝对象时,编译器的偷偷优化

1.连续的 构造和拷贝构造 会被优化成 直接调用构造。(分步的就无法优化了)2.产生的临时变量往往会被优化掉。

2023-09-05 16:03:12 258 10

原创 【C++】匿名对象 | explicit | static静态成员 | 友元

类的私有成员,一般情况下,外界是无法访问的。但实际上,private / protected并非是一堵密不透风的墙,它对外开了个小口子,我们可以通过小口子访问私有成员。这个小口子就是友元。友元是C++中的一种关系:像朋友一样亲密到可以访问私人空间的关系。发生在函数和类之间 or 类和类之间。通过友元的关系,可以让一个函数or类 访问另一个类中的私有成员(private / protected)。friend友元函数 友元类。

2023-09-03 22:28:59 131 2

原创 【C++】初始化列表

其实,无论是用初始化列表,还是函数体内初始化,对于内置类型都是无所谓的。但对于自定义类型成员变量,一定要使用初始化列表初始化。不然连编译都通过不了。

2023-08-28 00:20:10 185 5

原创 【C++】const成员 | 取地址运算符重载

我们知道,用const修饰 能起到保护,使之不被修改的作用。修饰指针的const有两种位置:我们学过的this指针,就被后者所修饰,因此无法被修改。

2023-08-27 01:49:40 230 1

原创 【C++小项目】实现一个日期计算器

本篇我们用C++来实现一个日期计算器。想知道迄今为止你在地球上一共度过了多少天吗?距离寒假还有多少天呢?一百天后会是几月几号呢?解开这些问题的答案,只需来写一个日期计算器~👻日期计算器是C++入门以来的第一个小项目,亲自实践一遍,我们在C++上的经验值将⬆️⬆️⬆️🚩我们将分三步:Step1:在头文件中把日期类的大体轮廓列出来Step2:把声明的功能一一实现Step3:逐个测试。我们写一点,测一点。这样,就可顺利把日期计算器写出个七七八八。在遇到较复杂的算法时,我会提供思路。

2023-08-24 22:43:54 1116 16

原创 【C++】运算符重载 | 赋值运算符重载

1.常用的操作符有:+、-、*、/、++、--、=(赋值)、==(判断相等)、>、=、

2023-08-20 23:54:15 1396 13

原创 【Linux】vim编辑器

vi / vim都是Linux和Unix系统下的多模式文本编辑器,其性质和nano记事本相似。vim是vi的升级版,它不仅兼容vi的所有指令,而且还有一些新的特性在里面,如语法加亮,自动缩进等。vim功能十分强大,因此学习成本较其他编辑器要高很多。那怎么用vim打开一个文件呢?

2023-08-20 16:12:13 235 8

原创 【Linux入门 · 下】Linux权限 用户 | chown | chmod | chgrp | 目录权限 | umask | 粘滞位 | shell

本篇我们主要学习Linux权限的知识,你将会了解什么是用户,如何切换用户?什么是权限,有哪些基本权限,又如何切换权限?……。在权限开始之前,我们先顺带介绍一下shell外壳程序。

2023-08-16 21:27:18 306 38

原创 【Linux】基本指令2 echo | more | less | head | date | cal |find | grep | zip | tar | bc | uname

h : 将系统的服务停掉后,立即关机。依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类 型,硬件平台类型,操作系统名称。-3 显示系统前一个月,当前月,下一个月的月历 -j 显示在当年中的第几天 -y 显示当前年份的日历。下面这种不是输入重定向,它要先打开test.c这个文件,读取文件内容到自己的程序内部,再打印。所以,Way2的理解是:把file.txt的前200行塞入管道,通过管道,再留取后5行。因为他输完whic,直接按Tab键,电脑就会自动补齐h和后面的空格,很方便。

2023-08-12 10:55:45 152 6

原创 C++类和对象(上) 面向过程与面向对象 | 访问限定符 | 封装 | 类的作用域 | 实例化 | 类对象的存储方式 | this指针

C++入门之类和对象

2023-08-10 14:51:34 97 4

原创 【Linux】基本指令 ls | pwd | cd | touch | mkdir | rm | man | cp | 路径 | mv | cat

入门Linux需要学习的10个指令

2023-08-08 23:30:03 81 6

原创 【C++】拷贝构造函数 什么时候需要自定义

我们为什么需要拷贝构造函数?什么时候要自定义,什么时候不要?

2023-08-03 00:25:16 108 3

原创 【C++】构造函数 | 析构函数

详解类的成员函数之构造函数和析构函数

2023-07-26 12:05:21 147 10

原创 【C++】C++基础知识

梳理了入门C++的基础知识

2023-07-21 22:15:35 117 10

原创 编译链接详解(c语言 )

本篇博客旨在帮助大家了解编译链接的过程……

2023-07-20 00:04:28 218 7

原创 快速了解函数栈帧,小白也能看懂(c语言)

我作为学c语言不久的小白,在网上查找函数栈帧的学习资料时,发现大多远超出我的知识范围,以至于很难理解。如果你也有同样的困境,那么这篇可以带你轻松了解函数函数栈帧

2023-07-12 00:46:40 240 5

空空如也

空空如也

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

TA关注的人

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