自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++航海王:追寻罗杰的编程之路】关于空间配置器你知道多少?

空间配置器,顾名思义就是为各个容器高效的管理空间(空间的申请与回收)的,在默默地工作。虽然在常规使用STL时,可能用不到它,但站在学习研究的角度,学习它的实现原理对我们有很大的帮助。

2024-07-21 18:45:37 672 30

原创 【C++航海王:追寻罗杰的编程之路】C++的IO流

在C语言中,如果想要将一个整型变量的数据转化为字符串格式,该如何去做呢?使用itoa()函数。使用sprintf()函数。但是两个函数在转化时,都得需要先给出保存结果的空间,那空间又需要给多大呢?这个就不太好界定了,而且转化格式不匹配时,可能还会得到错误的结果甚至程序崩溃。在C++中,可以使用stringstream类对象来避开此问题。在程序中如果想要使用stringstream,必须要包含头文件。

2024-07-18 14:44:18 897 49

原创 【C++航海王:追寻罗杰的编程之路】智能指针

什么是内存泄漏:内存泄漏是指因为疏忽或者错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。// 1.内存申请了忘记释放// 2.异常安全问题Func();// 这里Func函数抛异常导致 delete[] p3未执行,p3没被释放.

2024-07-16 16:37:03 1180 51

原创 【C++航海王:追寻罗杰的编程之路】哈希的应用——位图 | 布隆过滤器

给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。遍历,时间复杂度O(N)。排序(O(NlogN)),利用二分查找:logN。位图解决:数据是否在给定的整形数据中,结果是在或者不在,刚好是两种状态,那么可以使用一个二进制比特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,为0代表不存在。

2024-07-14 20:19:13 859 50

原创 【C++航海王:追寻罗杰的编程之路】一篇文章带你认识哈希

unordered_map文档说明unordered_map是存储键值对的关联式容器,其允许通过keys快速的索引到与其对应的value。在unordered_map中,键值通常用于唯一地标识元素,而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同。在内部unordered_map没有对按照任何特定的顺序排序,为了能在常数范围内找到key所对应的value,unordered_map将相同的哈希值的键值对放在相同的桶中。

2024-07-12 16:58:21 1004 52

原创 【C++航海王:追寻罗杰的编程之路】关联式容器的底层结构——红黑树

红黑树,是一种二叉搜索树,但在每个节点上增加了一个存储位表示节点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的。

2024-07-10 15:57:27 1024 48

原创 【在Linux世界中追寻伟大的One Piece】HTTPS协议原理

加密就是把明文(需要传输的信息)进行一系列变换,最后生成密文。解密就是把密文再进行一系列变换,最终还原成明文。在这个加密和解密的过程中,往往需要一个或者多个中间数据,辅助进行这个过程,这样的数据就称为密钥(正确发音应该是yue四声,不过平时都读作yao四声)。比如古时的"藏头诗":我花蓝江水悠悠,爱晚亭上枫叶愁。秋月溶溶照佛寺,香烟袅袅绕经楼。这首诗是许多人熟知的明代画家、书法家、诗人唐寅的作品。单从字面上来看,这是一首描写风景名物的诗作。

2024-07-07 19:17:04 1636 51

原创 【海贼王的数据航海】ST表——RMQ问题

ST表(Sparse Table,稀疏表),主要应用倍增思想,是一种用于解决可重复贡献问题的数据结构。它通过预处理给定数组,创建一个二维表格,使得任何区间的最小/最大值查询都可以在常数时间内完成。ST表特别适合于静态数据:当数列不经常改变时,它是最有效的。可以实现O(nlogn)预处理、O(1)查询。主要用于解决RMQ问题。可重复贡献问题是指在某些特定的数学运算中,当运算的性质满足一定条件时,即使是在包含重复部分的区间内进行询问,所得到的结果仍然是相同的问题。这种问题的特点是,它们可以。

2024-07-06 17:20:02 662 27

原创 【C++航海王:追寻罗杰的编程之路】关联式容器的底层结构——AVL树

二叉搜索树虽然可以缩短查找的效率,但如果数据有序或者接近有序的二叉搜索树将退化成单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明了一种解决上述问题的方法:当向二叉搜索树中插入新节点后,如果能保证每个节点的左右子树的高度差的绝对值不超过1(需要对树中的节点进行调整),即可降低树的高度,从而减少平均搜索的长度。

2024-07-05 18:29:57 1414 36

原创 【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍

set的文档介绍翻译:set是按照一定次序存储元素的容器。在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序。set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。set在底层是用二叉搜索树(红黑树)实现的。

2024-05-31 15:07:37 985 105

原创 【C++航海王:追寻罗杰的编程之路】一篇文章带你了解二叉搜索树

对有n个节点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树平均查找长度是节点在二叉搜索树的深度的函数,即节点越深,比较次数越多。,通过英文可以快速找到与其对应的中文,英文单词与其对应的中文就构成一种键值对。在二叉搜索树中检索该单词是否存在,存在则拼写正确,不存在则拼写错误。从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。,统计成功后,给定单词就可以快速找到其出现的次数,最多查找高度次,走到空,还没找到,这个值不存在。

2024-05-14 15:43:20 760 95

原创 【C++航海王:追寻罗杰的编程之路】特殊类的设计方式你知道哪些?

为什么会产生设计模式这样的东西呢?就像人类历史发展会产生兵法。最开始部落之间打仗时都是人拼人的对砍。后来春秋战国时期,七国之间经常打仗,就发现打仗也是有套路的,后来孙子就总结出了《孙子兵法》。孙子兵法也是类似。使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。

2024-05-04 16:15:23 1170 99

原创 【C++航海王:追寻罗杰的编程之路】多态你了解多少?

多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件必须通过基类的指针或者引用调用虚函数。被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。在虚函数的后面写上 = 0,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生类才能实例化出对象。

2024-05-01 18:34:59 1243 61

原创 【C++航海王:追寻罗杰的编程之路】C++11(四)

在C++11之前,涉及到多线程问题,都是和平台相关的,比如windows和linux下各有自己的接口,这使得代码的可移植性比较差。C++11中最重要的特性就是对线程进行支持,使得C++在并行编程时不需要依赖第三方库,而且在原子操作中还引入了原子类的概念。要使用标准库中的线程,必须包含头文件。C++11中线程类函数名功能thread()构造一个线程对象,没有关联任何线程函数,即没有启动任何线程构造一个线程对象,并关联线程函数fn, args1, args2, ……为线程函数的参数。

2024-04-28 16:22:03 1725 69

原创 【C++航海王:追寻罗杰的编程之路】C++11(三)

默认生成的移动构造函数,对于内置类型成员会执行逐成员按字节拷贝,自定义类型成员,则需要看这个成员是否实现移动赋值,如果实现了就调用移动赋值,没有实现就调用拷贝赋值。默认生成的移动构造函数,对于内置类型成员会执行逐成员按字节拷贝,自定义类型成员,则需要看这个成员是否实现移动构造,如果实现了就调用移动构造,没有实现就调用拷贝构造。(printarg(arg2),0), (printarg(arg3),0), etc... ),最终会创建一个元素值都为0的数组int arr[sizeof...(Args)]。

2024-04-25 19:13:06 1100 70

原创 【C++航海王:追寻罗杰的编程之路】C++11(二)

那么什么是左值?什么是左值引用呢?那么什么是右值?什么是右值引用呢?

2024-04-22 18:37:52 2302 77

原创 【C++航海王:追寻罗杰的编程之路】C++11(一)

在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。

2024-04-19 20:40:28 2110 65

原创 【C++航海王:追寻罗杰的编程之路】异常——错误处理方式之一

实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法使用,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了。// 服务器开发中通常使用的异常继承体系public:, _id(id){}protected:int _id;public:{}

2024-04-16 15:31:17 1981 63

原创 【C++航海王:追寻罗杰的编程之路】继承你学会了么?

Person是父类,也称作基类。Student是子类,也称派生类。1.很多人说C++语法复杂,其实多继承就是一个体现。有了多继承,就存在菱形继承,有了菱形继承就有菱形虚拟继承,底层实现就很复杂。所以一般不建议设计出多继承,一定不要设计出菱形继承。否则在复杂度及性能上都有问题。2. 多继承可以认为是C++的缺陷之一,后来很多的语言都没有多继承,如Java。3.继承和组合public继承是一种is-a的关系,也就是说每个派生类对象都是一个基类对象。

2024-04-12 21:19:16 1081 67

原创 【C++航海王:追寻罗杰的编程之路】探寻实用的调试技巧

环境中选择Debug选项,才能使代码正常调试。

2024-04-09 21:29:25 1716 64

原创 【C++航海王:追寻罗杰的编程之路】C++的类型转换

【C++航海王:追寻罗杰的编程之路】C++的类型转换

2024-04-06 18:34:38 1140 60

原创 【C++航海王:追寻罗杰的编程之路】关于模板,你知道哪些?

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

2024-04-03 19:44:51 1052 64

原创 【C++航海王:追寻罗杰的编程之路】priority_queue(优先队列) | 容器适配器你知道哪些?

适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。deque(双端队列):是一种双开口的”连续“空间的数据结构,双开口的含义是:可以在头尾两端进行插入和删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与list比较,空间利用率比较高。

2024-03-31 16:13:51 1512 71

原创 【C++航海王:追寻罗杰的编程之路】queue

1. 队列是一种容器适配器,专门用于在FIFO(先进先出)上下文中操作,其中从容器一端插入元素,另一端提取元素。2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。4. 标准容器类deque和list满足了这些要求。默认情况下,如果没有为deque实例化指定容器类,则使用标准容器deque。

2024-03-26 16:16:48 1205 77

原创 【C++航海王:追寻罗杰的编程之路】stack

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

2024-03-23 20:47:54 1079 65

原创 【海贼王的数据航海】排序——冒泡|快速|归并排序|总结

【海贼王的数据航海】排序——冒泡|快速|归并排序|总结

2024-03-19 15:17:54 1792 81

原创 【海贼王的数据航海】排序——直接选择排序|堆排序

【海贼王的数据航海】排序——直接选择排序|堆排序

2024-03-16 17:36:47 908 71

原创 【海贼王的数据航海】排序——概念|直接插入排序|希尔排序

所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序不变,即在原序列中,r[ i ] = r[ j ],且r[ i ] 在 r[ j ]之前,而在排序后的序列中,r[ i ] 仍在 r[ j ]之前,则称这种排序算法是稳定的;否则称为不稳定。:数据元素全部放在内存中的排序。:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。

2024-03-13 19:40:46 967 71

原创 【海贼王的数据航海】探究二叉树的奥秘

树是一种的数据结构,它是由n(n >= 0)个有限结点组成一个具有层次关系的集合。有一个,根结点没有前驱结点。除根结点外,,其中每一个集合Ti(1

2024-03-10 20:31:10 1142 79

原创 【海贼王的数据航海】栈和队列

队列:只允许一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)。队列也可以用数组和链表的结构实现,使用链表的结构实现更优,因为如果使用数组的结构,出队列在数组头上出数据,效率较低。栈的实现一般可以使用数组或链表实现,相对而言数组的结构实现更优。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。压栈:栈的插入操作叫进栈/压栈/入栈,

2024-03-07 19:29:55 906 69

原创 【海贼王的数据航海】链表—双向链表

可能需要搬移元素,效率低O(N)逻辑上连续,但物理上不一定连续。动态顺序表,空间不够时需要扩容。任意位置插入或者删除元素。元素高效存储+频繁访问。任意位置插入和删除频繁。

2024-03-04 20:38:28 1537 79

原创 【海贼王的数据航海】链表—单链表

概念:链表是一种的存储结构,数据元素的是通过链表中的次序实现的。上图可看出,链式结构在逻辑上是连续的,但是在物理上不一定连续;现实中的结点一般都是从堆上申请出来的;从堆上申请的空间,是按照一定策略分配的,两次申请的空间可能连续,也可能不连续。

2024-02-28 22:07:36 1491 72

原创 【海贼王的数据航海】顺序表

线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串……线性表在逻辑上是线性结构,也就是说它是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。

2024-02-25 23:01:14 1045 35

原创 【海贼王的数据航海】时间复杂度 | 空间复杂度

它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上来讲,是不能算出来的,只有把程序放在机器上跑起来才能知道。一个算法所花费的时间与其中语句的执行次数成正比例,但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。空间复杂度不是程序占用了多少byte的空间,因为意义不大,所以空间复杂度算的是变量的个数。即:找到某条语句与问题规模N之间的数学表达式,就是算出了该算法的时间复杂度。空间复杂度也是一个数学表达式,是对一个算法在运行过程中。在修改后的运行次数函数中,只保留最高阶项;

2024-02-22 21:02:28 1359 57

原创 【C++航海王:追寻罗杰的编程之路】vector

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

2024-02-19 23:06:41 1587 54

原创 【C++航海王:追寻罗杰的编程之路】string类

万字文章带你学习string类!!!

2024-02-17 22:25:31 1471 51

原创 【C++航海王:追寻罗杰的编程之路】关于模板,你知道哪些?

class 类模板名// 类内成员定义// 动态顺序表// 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public:, _size(0){}// 使用析构函数演示:在类中声明,在类外定义。~Vector();// 注意:类模板中函数放在类外进行定义时,需要加模板参数列表。

2024-02-15 18:49:39 1324 49

原创 【在Linux世界中追寻伟大的One Piece】Linux是从哪里来的?又是怎么发展的?基本指令你知道哪些?

目录的可执行权限是表示你可否在目录下执行命令。如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)。而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限。所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。

2024-02-13 22:02:06 1404 40

原创 【C++航海王:追寻罗杰的编程之路】C&C++内存管理你知道哪些?

new的原理调用operator new函数申请空间;在申请的空间上执行构造函数,完成对象的构造。delete的原理在空间上执行析构函数,完成对象中资源的清理工作;调用operator delete函数释放对象的空间。new T[]的原理调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对象空间的申请;在申请的空间上执行N次构造函数。delete[]的原理在释放的对象空间上执行N次析构函数,完成N个对象中资源的清理;

2024-02-10 23:21:01 2091 53

原创 【C++航海王:追寻罗杰的编程之路】类与对象你学会了吗?(下)

类是对某一类实体(对象)来进行描述的,描述该对象具有那些属性,那些方法,描述完成后就形成了一种新的自定义类型,才用该自定义类型就可以实例化具体的对象

2024-02-07 20:59:26 1520 39

KZZI_RGB_Keyboard_Setup_V2.0 20221004.exe

KZZI_RGB_Keyboard_Setup_V2.0 20221004.exe

2022-11-27

空空如也

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

TA关注的人

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