- 博客(30)
- 收藏
- 关注
原创 C++模板初阶
函数模板是一种C++的语言特性,用于定义通用的函数以实现代码的重用性和灵活性。大致过程是:定义一个函数模板,在调用时编译器会根据你给的类型结合函数模板,生成对应模板函数,而我们调用使用的就是这个模板函数,换句话说编译器会根据(函数模板+我们给的类型)生成对应的模板函数。定义方式是:关键字typename后跟尖括号,尖括号里面是函数模板的参数(用typename 或class定义),用作类型占位符在函数模板实例化时替换成对应的类型。typename定义在函数上方。返回类型 函数名(参数列表)// 函数体。
2023-07-01 21:54:25
242
原创 new和delete
new与delete是C++用于内存管理的操作符,new的功能是从堆区动态申请空间并返回一个指向该空间的指针,delete的功能是释放堆空间。newnew后面跟着需要申请空间的类型,如果是要开辟数组空间需要在加上[n],n表示开辟的数量。可以给初始值,单块空间是在类型后加上(x),x表示初始值,数组空间是在[ ]的后面加上{ }花括号,{ }里面是要初始化的内容。使用格式指针 指针变量名 = new 类型指针 指针变量名 = new 类型(初始值)
2023-06-30 14:43:49
302
原创 类和对象下复习总结
构造函数的函数体内并不是对象成员变量初始化的地方,而是对象成员变量进行赋值的地方,初始化列表才是对象成员变量初始化的地方。验证的方法很简单,在类里面添加必须进行初始化才能使用的成员变量看编译器报不报错,如:const对象、引用对象。初始列表位于构造函数的函数体外,使用方式:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。
2023-06-27 20:45:13
270
原创 类和对象中篇——默认成员函数总结
在类中有一些特殊的成员函数,称为默认成员函数它们用来执行常见的操作,例如对象的初始化、清理、拷贝和赋值等,默认成员函数区别于其他成员函数的地方在于就算我们不写编译器也会默认生成。默认成员函数有6个:构造函数(用于完成初始化工作)析构函数(用于完成清理工作)拷贝构造(用于使用同类对象初始化创建对象)赋值重载(用于把一个对象赋值给另一个对象)取地址重载(用于普通对象取地址,这个很少会自己实现)const取地址重载(用于const对象取地址,这个很少会自己实现)
2023-06-25 15:52:09
420
原创 类和对象上(2)类对象模型和this指针
类的成员函数与成员变量是分开存储的,类中的成员变量仅是声明,在对象实例化时存储在类对象中,非静态成员函数存储在代码区,静态成员则存储在全局/静态区。在调用非静态成员函数时会将该对象的地址也一并传入给成员函数做参数,只不过这个过程是隐式发生的。类名* const this指针就是用来接收对象地址的,同样对用户来说也是透明的。
2023-06-21 21:12:09
62
原创 类和对象上篇(1)
c++是一款面向对象的语言,面向对象语言模拟的是现实世界,c++中的类就是用来模拟现实世界具体对象的。类与对象的关系就好比类型与变量,我们通过类(类型)来创建对象(变量)。类的创建方式与结构体类似,class和struct都可以创建类,差别在于class默认权限是private(私有),struct的默认权限是public(公有)。类成员可以有变量、函数、类等,类中的变量称为成员变量,类中的函数称为成员函数。成员函数的定义可以在类中也可以在类外,在类中时会被编译器当成内联函数处理,在类外需要使用域限
2023-06-21 14:52:36
57
原创 关于引用的复习与总结
引用变量是C++中的一种特殊类型的变量,它可以视为已经声明的变量取一个别名,引用变量与它引用的变量共用同一块空间引用变量时必须初始化且引用的类型必须与被引用的对象类型相同一个变量可以有多个引用,引用变量一旦引用一个变量,就不能在引用其他变量引用只能允许权限的平移和缩小,引用不能引用字面常量指针是一个变量,它存储了一个地址,可以用来间接访问其他变量或对象的值。引用变量在语法概念上就是一个别名,没有独立空间,和其引用的变量共用同一块空间
2023-06-20 09:42:57
105
原创 内联函数与auto关键字
内联函数是一种特殊的函数,区别与其他函数的地方在于,内联函数没有函数栈帧也不会产生函数调用,它会在函数调用处展开函数体内的代码。内联函数可以减少函数调用和返回的开销,提高程序的执行效率,由于内联函数在每个调用点都会展开,如果内联函数的函数体过于庞大可能会导致代码膨胀,因此内联函数适合定义简单的、频繁调用的函数。auto可以根据初始化的表达式来自动推导出auto的实际类型。要注意的是auto并非是一种类型,而是一种类型“占位符”,编译器在编译阶段会将auto替换为变量实际的类型。
2023-06-19 09:55:34
69
原创 一篇博客讲清楚函数重载
在c语言中是不允许出现同名函数的,c++弥补了c的缺陷允许出现同名不同参数的函数而解决方案就是函数重载。函数重载:在C++中允许在同一个域中,出现同名不同参数(参数个数不同、参数类型不同、参数类型顺序不同)的函数,这种函数情况就被称作函数重载,而这种函数也被称之为重载函数。编译器会根据你传入的参数自动调用对应函数//参数类型不同int main()f(3,5);//调用的是F1(int x, int y)f(3.0,5,0);//调用的是F1(double x, double y)
2023-06-16 20:50:23
86
原创 关于缺省参数的一切
缺省参数指的是在声明或定义函数时为函数的参数传入一个初始值(这个初始值被称为缺省值),这种函数参数就被称为缺省参数,缺省参数的特点是:在调用该函数时如果缺省参数没有传入被实参则采用缺省值来初始缺省参数,如果传入了实参则采用实参来初始化缺省参数。//没有传参时使用缺省值来初始化aFunc(10);//传参时使用指定的实参来初始化areturn 0;缺省参数在没有对应的实参传入时会采用缺省值来进行初始化。
2023-06-16 09:18:36
132
原创 C++输入输出的方法cout与cin
使用时必须包含< iostream >头文件并展开命名空间名std,std是c++标准库的命名空间。C++的输入输出是用类来实现的。
2023-06-14 15:47:07
148
原创 一篇文章带你理解和掌握命名空间
相同的域里面无法定义重名的变量、函数、类型,但不的同域之间可以定义重名的变量、函数、类型命名空间是C++用来解决C语言命名冲突的方案,通过创建一个自己的命名空间域来与其他的域区分开从而避免命名冲突::(域限定符)可以让编译器去指定的域里面进行搜索,::前面是空白就表示去全局域里面搜索命名空间的访问方式有三种:将命名空间全部展开,将命名空间部分展开,使用域限定符指定去命名空间里面搜索。
2023-06-14 10:13:02
196
原创 归并排序的思想及其实现
假设左区间有序、右区间有序就可以经行归并。但左区间没有序,这时可以继续拆分直到左右区间只有一个元素时就可以归并,那在返回上一层用同样的方式让右区间在有序。让个元素个数为gap的两个区间先进行归并,在把gap乘等于2后在让gap的两个区间先进行归并。
2023-04-13 09:23:46
61
原创 快速排序的思想及其实现
假设排升序选左边的作key,一开始将key的位置作为坑,从右边找比key小的值如果找到了就把该值填入坑中,并让当前位置成为新的坑,在从左边找比key大的值如果找到了就把该值填入坑中,并让当前位置成为新的坑。取出左右区间的下标选出一个基准值,如果基准值的右区间的元素个数大于1且右区间不为空将右区间的左右下标入栈,如果基准值的左区间的元素个数大于1且左区间不为空将左区间的左右下标入栈,如此循环往复直到栈为空。情况1: cur小于key,让prev++,在交换prev与cur的内容,在让cur++
2023-04-13 09:17:58
110
原创 二叉树链式结构之二叉链
二叉链是链式结构的一种用链表来表示一棵二叉树,即用链来指示元素的逻辑关系,链表中每个结点由三个域组成,数据域和左右指针域,左指针指向该节点的左孩子,右指针指向该节点的右孩子。所谓二叉树遍历是按照某种特定的规则,依次对二叉树中的节点进行相应的操作,并且每个节点只操作一次。二叉树的遍历由4种方式:前序遍历、中序遍历、后续遍历、层序遍历
2023-04-07 14:57:02
168
原创 二叉树顺序结构之堆
堆是一颗完全二叉树。堆中的所有父亲节点都大于(包括等于)或小于(包括等于)自己的孩子节点。其中前一种堆结构我们称为大堆,后一种堆结构称为小堆。大堆的根节点称为大堆顶,小堆的根节点称为小堆顶。堆顶的数据总是堆中最大或最小的。
2023-04-07 09:29:32
316
原创 树与二叉树
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合,上一层的节点链接着这一层的节点而这一层的节点又链接下一层的节点。最上层的节点及第一层只有一个节点称之为:根节点。(如果没有根节点那就是空树)数据结构中的树它很像现实中一个倒挂的树,有一个根节点,根节点上又有众多的分支节点,分支节点上又有分支节点.....因此才称它为树型结构,树的各节点之间呈现的是一种一对多的结构关系。
2023-04-04 11:24:30
69
原创 关于队列的那些事
什么是队列队列是一种数据结构,所谓数据结构就是根据具体的场景来决定以什么样的方式来存储和管理数据,每一种数据结构都有其特点与运用场景。那队列的特点与结构是什么呢,它又有那些运用场景呢?队列的概念与结构队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的特点。入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为队头
2023-03-31 16:06:17
65
原创 关于栈的那些事
什么是栈栈是一种数据结构,等等什么又是数据结构呢?数据结构的本质是数据的存储方式,根据不同的场景来决定以什么样的方式来存储和管理这些数据。那为啥必须要有数据结构呢,如果没有数据结构我们就无法保存与使用数据了。我们最常见的数据结构其实是数组,它可以存储与读取数据,数组是线性存储数据的,也就是说数据与数据之间逻辑上是连续的。除此之外顺序表、链表、栈、队列都是线性结构的。你也许会 有疑问为啥有这么多的不同种类的数据结构,因为生活中的场景不是单一的,没有一种数据结构可以完美解决所有多样化的场景。
2023-03-30 20:19:47
129
原创 文件操作
当我们使用fopen打开一个文件可以得到一个文件指针,这个文件指针也会被用于读写文件的时候。我们在读取一个文件的时候,文件指针指向下一个我们要读取的字符(一开始指向第一个字符),每当我们调用一次读取函数时,如 fgetc/fgets,这个文件指针就会向后移动一个或者多个单位。文件的随机读写,其实就是我们可以指定这个文件指针指向的位置,即指向第几个字符,然后从这个字符开始读写。
2023-02-22 16:35:43
80
原创 文件随机读写函数介绍
根据whence为起始位置偏移offset个字节。返回文件指针相对于起始位置的偏移量。让文件指针的位置回到文件的起始位置。指向 FILE 对象的指针。指向要读的那个文件流的指针。相对于whence的偏移量。指向 FILE 对象的指针。
2023-02-22 15:53:28
59
原创 C语言运行环境介绍
翻译环境:它用于将源代码转换成可执行的机械指令执行环境:它就是一般说的可执行程序翻译环境分为两步第一步是编译,通过编辑器将同一工程内不同的源文件都转换成目标文件第二步是链接,通过链接器将不同的目标文件都链接起来形成一个可执行程序,同时连接器还会将标准库函数中所用到的函数和个人程序库中所用到的函数连接到该程序中执行环境-> 终止程序,释放空间将程序加载到内存中-> 程序开始执行,调用main函数 -> 开始执行程序代码
2023-02-21 08:11:26
2601
原创 C语言动态内存开辟函数介绍之calloc、realloc
calloc函数用于从存堆上申请一块指定大小的空间并把该空间的内容全部初始化为0,在以函数返回的形式返回指向该空间起始地址的指针向堆区申请一块连续的空间并将空间的内容全部初始化为0,最后返回指向该空间起始地址的指针参数1,要申请的元素个数参数2,每个元素的大小果申请空间成功,会返回一个指向该空间起始地址的指针如果申请空间失败,会返回NULL(空指针)int main()//向堆区申请10个元素,每个元素占4个字节大小并将该空间的内如初始化为0//使用if (pa!= NULL)
2023-02-10 21:31:43
402
原创 C语言动态内存开辟函数介绍之malloc、free
动态内存开辟,指的是从堆上面申请指定大小的空间,动态内存开辟函数一共有四个,分别是malloc,calloc,free,fealloc。malloc与calloc是用来开辟空间,以返回值的形式来接受该空间的起始的地址,calloc区别与malloc的是它会将返回的空间全部初始化为0fealloc是用来扩缩容空间的free是用来将空间返回给堆区的
2023-02-10 10:42:05
445
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人