C++
文章平均质量分 92
枫叶丹4
这个作者很懒,什么都没留下…
展开
-
【C++航海王:追寻罗杰的编程之路】关联式容器的底层结构——红黑树
红黑树,是一种二叉搜索树,但在每个节点上增加了一个存储位表示节点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的。原创 2024-07-10 15:57:27 · 657 阅读 · 45 评论 -
【海贼王的数据航海】ST表——RMQ问题
ST表(Sparse Table,稀疏表),主要应用倍增思想,是一种用于解决可重复贡献问题的数据结构。它通过预处理给定数组,创建一个二维表格,使得任何区间的最小/最大值查询都可以在常数时间内完成。ST表特别适合于静态数据:当数列不经常改变时,它是最有效的。可以实现O(nlogn)预处理、O(1)查询。主要用于解决RMQ问题。可重复贡献问题是指在某些特定的数学运算中,当运算的性质满足一定条件时,即使是在包含重复部分的区间内进行询问,所得到的结果仍然是相同的问题。这种问题的特点是,它们可以。原创 2024-07-06 17:20:02 · 629 阅读 · 26 评论 -
【C++航海王:追寻罗杰的编程之路】关联式容器的底层结构——AVL树
二叉搜索树虽然可以缩短查找的效率,但如果数据有序或者接近有序的二叉搜索树将退化成单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明了一种解决上述问题的方法:当向二叉搜索树中插入新节点后,如果能保证每个节点的左右子树的高度差的绝对值不超过1(需要对树中的节点进行调整),即可降低树的高度,从而减少平均搜索的长度。原创 2024-07-05 18:29:57 · 1375 阅读 · 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 · 971 阅读 · 104 评论 -
【C++航海王:追寻罗杰的编程之路】一篇文章带你了解二叉搜索树
对有n个节点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树平均查找长度是节点在二叉搜索树的深度的函数,即节点越深,比较次数越多。,通过英文可以快速找到与其对应的中文,英文单词与其对应的中文就构成一种键值对。在二叉搜索树中检索该单词是否存在,存在则拼写正确,不存在则拼写错误。从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。,统计成功后,给定单词就可以快速找到其出现的次数,最多查找高度次,走到空,还没找到,这个值不存在。原创 2024-05-14 15:43:20 · 752 阅读 · 95 评论 -
【C++航海王:追寻罗杰的编程之路】特殊类的设计方式你知道哪些?
为什么会产生设计模式这样的东西呢?就像人类历史发展会产生兵法。最开始部落之间打仗时都是人拼人的对砍。后来春秋战国时期,七国之间经常打仗,就发现打仗也是有套路的,后来孙子就总结出了《孙子兵法》。孙子兵法也是类似。使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。原创 2024-05-04 16:15:23 · 1155 阅读 · 99 评论 -
【C++航海王:追寻罗杰的编程之路】多态你了解多少?
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件必须通过基类的指针或者引用调用虚函数。被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。在虚函数的后面写上 = 0,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生类才能实例化出对象。原创 2024-05-01 18:34:59 · 1208 阅读 · 60 评论 -
【C++航海王:追寻罗杰的编程之路】C++11(四)
在C++11之前,涉及到多线程问题,都是和平台相关的,比如windows和linux下各有自己的接口,这使得代码的可移植性比较差。C++11中最重要的特性就是对线程进行支持,使得C++在并行编程时不需要依赖第三方库,而且在原子操作中还引入了原子类的概念。要使用标准库中的线程,必须包含头文件。C++11中线程类函数名功能thread()构造一个线程对象,没有关联任何线程函数,即没有启动任何线程构造一个线程对象,并关联线程函数fn, args1, args2, ……为线程函数的参数。原创 2024-04-28 16:22:03 · 1700 阅读 · 69 评论 -
【C++航海王:追寻罗杰的编程之路】C++11(三)
默认生成的移动构造函数,对于内置类型成员会执行逐成员按字节拷贝,自定义类型成员,则需要看这个成员是否实现移动赋值,如果实现了就调用移动赋值,没有实现就调用拷贝赋值。默认生成的移动构造函数,对于内置类型成员会执行逐成员按字节拷贝,自定义类型成员,则需要看这个成员是否实现移动构造,如果实现了就调用移动构造,没有实现就调用拷贝构造。(printarg(arg2),0), (printarg(arg3),0), etc... ),最终会创建一个元素值都为0的数组int arr[sizeof...(Args)]。原创 2024-04-25 19:13:06 · 1090 阅读 · 70 评论 -
【C++航海王:追寻罗杰的编程之路】C++11(二)
那么什么是左值?什么是左值引用呢?那么什么是右值?什么是右值引用呢?原创 2024-04-22 18:37:52 · 2278 阅读 · 75 评论 -
【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 · 2084 阅读 · 64 评论 -
【C++航海王:追寻罗杰的编程之路】异常——错误处理方式之一
实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法使用,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了。// 服务器开发中通常使用的异常继承体系public:, _id(id){}protected:int _id;public:{}原创 2024-04-16 15:31:17 · 1958 阅读 · 63 评论 -
【C++航海王:追寻罗杰的编程之路】继承你学会了么?
Person是父类,也称作基类。Student是子类,也称派生类。1.很多人说C++语法复杂,其实多继承就是一个体现。有了多继承,就存在菱形继承,有了菱形继承就有菱形虚拟继承,底层实现就很复杂。所以一般不建议设计出多继承,一定不要设计出菱形继承。否则在复杂度及性能上都有问题。2. 多继承可以认为是C++的缺陷之一,后来很多的语言都没有多继承,如Java。3.继承和组合public继承是一种is-a的关系,也就是说每个派生类对象都是一个基类对象。原创 2024-04-12 21:19:16 · 1069 阅读 · 67 评论 -
【C++航海王:追寻罗杰的编程之路】探寻实用的调试技巧
环境中选择Debug选项,才能使代码正常调试。原创 2024-04-09 21:29:25 · 1708 阅读 · 64 评论 -
【C++航海王:追寻罗杰的编程之路】C++的类型转换
【C++航海王:追寻罗杰的编程之路】C++的类型转换原创 2024-04-06 18:34:38 · 1118 阅读 · 60 评论 -
【C++航海王:追寻罗杰的编程之路】关于模板,你知道哪些?
一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程被称为分离编译模式。优点:模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生。增强了代码的灵活性。缺陷:模板会导致代码膨胀问题,也会导致编译时间变长。出现模板编译错误时,错误信息非常凌乱,不易定位错误。!!互三啦!!!原创 2024-04-03 19:44:51 · 1037 阅读 · 64 评论 -
【C++航海王:追寻罗杰的编程之路】priority_queue(优先队列) | 容器适配器你知道哪些?
适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。deque(双端队列):是一种双开口的”连续“空间的数据结构,双开口的含义是:可以在头尾两端进行插入和删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与list比较,空间利用率比较高。原创 2024-03-31 16:13:51 · 1497 阅读 · 71 评论 -
【C++航海王:追寻罗杰的编程之路】queue
1. 队列是一种容器适配器,专门用于在FIFO(先进先出)上下文中操作,其中从容器一端插入元素,另一端提取元素。2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。4. 标准容器类deque和list满足了这些要求。默认情况下,如果没有为deque实例化指定容器类,则使用标准容器deque。原创 2024-03-26 16:16:48 · 1189 阅读 · 77 评论 -
【C++航海王:追寻罗杰的编程之路】stack
1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。3. stack的底层容器可以是任何标准的容器类模板或一些其他特定的容器类,这些容器类应该支持以下操作:empty: 判空操作back: 获取尾部元素操作。原创 2024-03-23 20:47:54 · 1066 阅读 · 65 评论 -
【C++航海王:追寻罗杰的编程之路】vector
vector是表示可变大小数组的序列容器;像数组一样,vector也采用的连续存储空间来存储元素。也就意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理;本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。原创 2024-02-19 23:06:41 · 1570 阅读 · 54 评论 -
【C++航海王:追寻罗杰的编程之路】string类
万字文章带你学习string类!!!原创 2024-02-17 22:25:31 · 1457 阅读 · 51 评论 -
【C++航海王:追寻罗杰的编程之路】关于模板,你知道哪些?
class 类模板名// 类内成员定义// 动态顺序表// 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public:, _size(0){}// 使用析构函数演示:在类中声明,在类外定义。~Vector();// 注意:类模板中函数放在类外进行定义时,需要加模板参数列表。原创 2024-02-15 18:49:39 · 1319 阅读 · 49 评论 -
【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 · 2077 阅读 · 53 评论 -
【C++航海王:追寻罗杰的编程之路】类与对象你学会了吗?(下)
类是对某一类实体(对象)来进行描述的,描述该对象具有那些属性,那些方法,描述完成后就形成了一种新的自定义类型,才用该自定义类型就可以实例化具体的对象原创 2024-02-07 20:59:26 · 1517 阅读 · 39 评论 -
【C++航海王:追寻罗杰的编程之路】类与对象你学会了吗?(中)
万字文章继续学习类与对象!!!原创 2024-02-04 23:44:39 · 1890 阅读 · 50 评论 -
【C++航海王:追寻罗杰的编程之路】类与对象你学会了吗?(上)
其中,class为定义类的关键字ClassName为类的名字{}中为类的主体注意类定义结束时后面的分号不能省略。类体中内容称为类的成员类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。int _id;原创 2024-02-01 23:33:34 · 1943 阅读 · 59 评论 -
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
在早期C/C++中auto的含义为:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,为什么呢?C++11中,标准委员会赋予了auto全新的含义,即auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。原创 2024-01-30 23:45:26 · 1355 阅读 · 54 评论 -
【C++航海王:追寻罗杰的编程之路】STL—next_permutation函数
STL—next_permutation函数简述原创 2023-11-16 01:49:40 · 2001 阅读 · 75 评论 -
【C++航海王:追寻罗杰的编程之路】关键字、命名空间、输入输出、缺省、重载汇总
作为C++入门的第一篇文章,主要介绍了C++的发展史,关键字、命名空间、输入输出、缺省参数、函数重载原创 2023-07-17 13:49:51 · 369 阅读 · 54 评论