- 博客(61)
- 收藏
- 关注
原创 C/C++ 进阶(2)多态
1、必须通过基类的指针或者引用调用虚函数。2、被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。public:// 用virtual修饰的函数cout
2024-05-21 22:14:47 616
原创 C/C++ 进阶(1)继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。对于不同的类,可能会有相同的属性,如果在每一个类中都存一份相同的属性,可能会属性冗余。这样我们就可以把相同的属性拿出来,单独设置成一个类,然后成为父类(基类)这个表格挺重要的!!!
2024-05-18 22:28:36 687
原创 C/C++ 入门(12)模板进阶
一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生。2. 增强了代码的灵活性。
2024-05-14 00:30:32 802
原创 C/C++ 入门(11)stack、queue(STL)
适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。stack、queue、priority_queue底层都是容器适配器。deque(双端队列):是一种双开口的"连续"空间的数据结构,双开口的含义是:可以在头尾两端进行插入和删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与list比较,空间利用率比较高。deque通过多个数组实现的。
2024-05-13 14:59:42 817
原创 Linux 权限
就是通过一定的条件拦住一部分人,给另一部分人权力,来访问某种资源。sudo:super user do(干超级用户干的事)说白了就是一个提权功能,让一个非root用户拥有root用户的操作权限。
2024-05-11 22:01:34 705 1
原创 C/C++ 入门(7)string类(STL)
1、string是表示字符串的字符串类2、该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。
2024-04-22 09:49:58 1160
原创 C/C++ C/C++ 入门(6)模板初阶
在编译器编译阶段,对于模板函数的使用,编译器需要根据传入的实参类型来推演生成对应类型的函数以供调用。比如:当用double类型使用函数模板时,编译器通过对实参类型的推演,将T确定为double类型,然后产生一份专门处理double类型的代码,对于字符类型也是如此。是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。1、一个非模板函数可以和一个同名的模板函数同时存在,而且该函数模板还可以被实例化为这个非模板函数。类模板名字不是真正的类,而实例化的结果才是真正的类。
2024-04-15 17:24:16 1079
原创 C/C++ 入门(5)内存管理
new的原理:1、调用operator new函数申请空间。2、在申请的空间上执行构造函数,完成对象的构造。delete的原理:1、在空间上执行析构函数,完成对象中资源的清理工作。2、调用operator delete函数释放空间。new T[N]的原理:1、 调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对象空间的申请。2、 在申请的空间上执行N次构造函数。delete[]的原理。
2024-04-12 18:54:38 628
原创 C/C++ 入门(4)类和对象(下)
在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值,构造函数体中的语句只能将其称为赋初值,而不能称作初始化。2、多个参数的类,如果构造的时候,仅需要一个参数进行构造的话,如果没有explicit修饰的话,具有类型转换。友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要加。如果一个类定义在另一个类的内部,这个内部类就叫做内部类。友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。
2024-04-11 11:47:57 1084
原创 类和对象总结
成员函数存储在代码段中,而不是对象中。内联函数在编译阶段就会在调用的地方进行展开(没有函数的地址),如果把声明定义分离,则无法链接或者是找不到链接(有符号表,但是对应的符号没有地址,无法解析)。
2024-04-08 21:04:47 240
原创 Linux 常用指令及其理论知识
写代码:1.nano 源文件 2.CTRL + X 3. y 4. enter 5. gcc 源文件 6../a.out。指令出现疯狂打印的情况:CTRL + C(终止异常的命令)指令的本质就是程序——指令、程序、可执行程序都是一回事。echo:将后面的字符串输出到显示器上。安装和卸载——是把可执行程序拷贝/删除到系统路径下。rmdir [-p][dirName] 删除目录。Linux中同一个目录下不允许有同名文件。文件 = 文件属性 + 文件内容。rm:删除文件或目录。
2024-04-06 17:30:41 1365 1
原创 C/C++ C++入门(2)类和对象(上)
/ class 和 struct 是定义类的关键字、A1,A2是类的名字、{}里面的是类的主体// 注意:最后的分号不要忘记!!!class A1{// 属性(成员变量) —— 默认的属性的权限是privite// 方法(成员函数)struct A2{// 属性 —— 默认的属性的权限是public// 方法如果成员函数在类中定义,编译器可能会将其当成内联函数处理。public:public:// 学生的属性是 名字和年龄int _age;
2024-03-23 16:47:59 844
原创 C/C++ h0138. 疯牛
通过题目看,这就是一个二分+贪心的题目。通过二分来找相邻两头牛间的距离,然后每二分一次,就判断一次摊位是否能放得下c头牛。
2024-02-02 08:28:41 500
原创 C/C++ C++入门(1)
/ 正常定义int a = 1;int b = 2;// 嵌套定义int a = 1;int b = 2;int a = 1;int b = 2;// 一个工程里面允许定义多个相同的命名空间——编译器最后会合成同一个命名空间中。int main()// 打印cpp2里面的函数// 打印cpp2里面的cpp3里面的函数return 0;
2024-02-01 09:08:14 2372 3
原创 LeetCode:376.摆动序列
其中一个是 [1, 17, 10, 13, 10, 16, 8] ,各元素之间的差值为 (16, -7, 3, -3, 6, -8)。仅有一个元素或者含两个不等元素的序列也视作摆动序列。可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。我们只需要记录每段是上升的还是下降的,然后如果连续的两个序列不同的话,就进行记录。整个序列均为摆动序列,各元素之间的差值为 (6, -3, 5, -7, 3)。我们要求摆动序列的最大子序列(可以进行删除操作,创造子序列)
2024-01-27 14:25:05 528 2
原创 C/C++ LeetCode:跳跃问题
区间覆盖,我们可以每次移动一位的时候就进行一次区间覆盖的估计,然后将区间覆盖最大的来更新旧的,如果区间将数组的最后一个元素覆盖了之后,就证明我们肯定能保证能存在一个最短的路径,使得步数最小。数组的第一个元素是2,那我们是不是要往后移动2个元素,才能保证步数最短呢?显然不是,如果我们直接往后移了2位,是比只移了1位的距离远(从下标为 0 跳到下标为 1 的位置,跳 1步,然后跳 3 步到达数组的最后一个位置。可是每一步都尽可能的大,这句话可能会有一些歧义。题目让我们来解答如何才能在最短的步数内到达终点。
2024-01-26 21:00:10 413
原创 C/C++ 堆排序
今天要介绍的是堆排序。首先什么是堆?简而言之,堆就是二叉树的数组形式,用数组来存储二叉树。这个堆和C语言中讲的堆区是不同的两个概念,不要混淆。该操作的主要作用是将该堆中最大的元素进行归位,并且进行调整除了最后一个元素的二叉树的顺序,使其仍为一个堆。// 进行删除最后一个元素// 假设左节点最大,如果右结点比左节点大,就child存右节点下标child += 1;// 判断孩子结点和父节点的值else// 不需要则退出break;
2024-01-11 22:52:07 849 18
原创 C/C++ 表达式求值(含多位数)
表达式求值是一个比较基础的代码关于栈的使用。在写的时候充分锻炼了大脑的思维和对代码的调试能力。如果是在纸上给一个计算表达式,你一定可以算出来,但是要用代码实现的时候就会感觉没什么思路了,接下来就来看我给你“操作一番”!
2023-12-13 22:27:20 1616 39
原创 C/C++ 前缀和与差分
前缀和就更像是数学中的前n项和。比如说数组【1,1,1,1,1】,则前缀和数组就是【1,2,3,4,5】。差分更像是前缀和数组的原数组。比如说前缀和数组是【1,2,3,4,5】,则差分数组就是【1,1,1,1,1】。总结一句话:前缀和和差分是互逆运算。
2023-12-06 12:35:43 761 42
原创 C/C++ 整数二分以及浮点数二分
/k为查找的数while (i+1!return i;return 0;//k为查找的数while (i+1!return i;return 0;
2023-12-03 23:03:39 727 35
原创 C/C++ 快速排序
一、引言快速排序的思想——分治一、引言快速排序是对冒泡排序的一种改进。它的基本思想在于划分,首先选一个基准x,让x的左边都小于x,让x的右边都大于x。然后通过递归,一直将数组分成两个或一个元素。二、讲解1、步骤1、将确定分界点。2、调整范围——让基准x的左边都小于x,让x的右边都大于x。3、递归分治。如果arr数组为:【0,1】基准点为左边界。因为i先自增,arr[0]==0,退出循环.。j先自减,arr[j]>0,继续进入循环,j--,arr[j]==0,退出循环。
2023-12-02 00:18:37 591 35
原创 C/C++ 递归指数型枚举
之前进行枚举的时候,都是进行暴力枚举的策略,将所用可能性都枚举一遍以获得最优解,但是枚举全部元素的效率如同愚公移山,无法应付数据范围稍大的情形。其算法的主要策略是跳过一些无效状态,降低问题的规模。
2023-11-22 20:37:31 477 49
原创 C/C++【数据结构】一文秒懂二叉树
树形结构是一类非常重要的非线性结构。树形结构是节点之间有分支,并且具有层次关系的结构,它类似于自然界中的树。就比如说:电脑中磁盘中的文件储存方式就类似于一颗树。在讲二叉树之前,我们要先讲树的定义和树的一些术语。树是n(n>=0)个结点的有限集,T为空时称为空树。非空树的特点:T中有且仅有一个结点K,没有前驱,称K为树的根结点。除了根结点以外,其余节点有且仅有一个直接前驱。T中各结点可以有0个或者多个后继。除了根节点以外,其余结点可以分为m个互不相干的有限集合。
2023-11-11 16:27:19 544 67
原创 C/C++【数据结构】一文秒懂时间复杂度和空间复杂度!
数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。算法(Algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间,但是这个是不可以计算出来的,只有在机器上跑出来才知道。每个机器可能因为CPU等硬件的不同,跑出来的时间也不一定相同。
2023-11-07 12:30:47 635 52
原创 C/C++快速求素数【细节满满】
在以前的学习的时候,我们写过如何求1-n以内的素数,也写过判断某个数是否是素数。然后我们从数字2(我们知道数字2是素数)开始进行对其整数倍进行标记,同理3也是如此。循环2-sqrt(x),然后对x进行取余,如果取余结果为0,则不是素数,反之,是素数。首先,我们要有1-n之间的数,然后一个一个的判断其是不是素数,然后进行打印。判断是不是素数,不要写一个判断函数,从2-sqrt(n)进行循环取余判断。欧拉筛是唯一筛掉一个数的筛法,不存在重复计算,所以时间复杂度是O(n)。同样地,我们首先是提供1-n之间的数。
2023-11-03 22:01:41 2123 57
原创 C/C++数据结构——队列
在前面学习了栈的基本知识,知道栈是一种特殊的线性表,其特点是先进后出。而接下来要学的队列也是一种操作受限的线性表,其特点是先进先出。从队头出队,从队尾入队。
2023-10-24 12:20:45 761 60
原创 C/C++程序设计和预处理
计算机程序是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息工具。说白了互联网、智能移动设备、云计算、大数据的共同基础、共同的指挥官就是程序。简而言之,程序=算法+数据结构。预定义符号都是语言内置的。//预定义符号__FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义int main()//预定义符号。
2023-10-21 20:51:00 929 49
原创 C/C++文件操作(细节满满,part2)
通过上篇文章,已经了解了什么是文件、打开和关闭文件的操作,流的概念等。如果对于上述的内容感到有点陌生了,不妨去看一看,文章链接在开头。这篇文章的内容将会包含写文件的基本操作。
2023-10-17 22:39:33 1767 46
原创 C/C++内存函数的用法及其实现( 超详细)
而对于内存中的数据,我们在写函数的时候并不知道程序员将调用这个函数来完成什么类型的数据拷贝,如果将它强转成(int*)类型的话,在需要复制的数据所占空间不是4的整数的时候在边界会一些问题。我们需要知道void*类型的指针不能直接进行解引用操作和运算操作,需要把它进行强制类型转化为所适合的类型,然后再进行相应的操作。destination:指向要在其中复制内容的目标数组的指针,类型转换为 void* 类型的指针。source:指向要复制的数据源的指针,类型转换为 const void* 类型的指针。
2023-10-05 20:22:01 640 27
KTV点歌程序-大一C语言课设
2023-09-12
数据结构两个有序链表拼接一个有序链表
2023-09-18
TA创建的收藏夹 TA关注的收藏夹
TA关注的人