自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

博客是在C++/Java/Liunx/算法的学习阶段所写的博客,内容可能不是很全面

博客都是在本人学习知识的基础上写的,可能会有些错误,请大家谅解

  • 博客(72)
  • 收藏
  • 关注

原创 C++进阶-红黑树(难度较高)

本文详细讲解了红黑树的实现原理和代码实现。主要内容包括: 红黑树的基本概念和五大规则,确保最长路径不超过最短路径的两倍; 红黑树的插入操作,重点分析了不同情况下的变色和旋转处理(单旋、双旋); 完整代码实现,包括结点定义、旋转操作、插入逻辑和验证方法; 红黑树查找的实现和测试用例; 简要介绍了删除操作的思路。 红黑树通过颜色约束和旋转操作保持近似平衡,效率与AVL树相当但旋转次数更少。本文强调理解旋转逻辑的重要性,建议通过画图辅助理解。代码经过测试验证,为后续用红黑树实现map和set打下基础。

2025-07-18 16:50:32 1720 5

原创 C++进阶-AVL树(平衡二叉查找树)(难度较高)

AVL树是C++中一个特别抽象的东西,我也只是实现了AVL树的插入操作,一般情况下,如果实现删除操作,代码就差不多700行左右,AVL树要理解最重要的就是画图,只有画图才能真正理解AVL树的旋转操作,特别是手敲代码的时候,可能会遇到很多的错误,包括但不限于:遗漏步骤、条件判断错误、更新平衡因子不全的问题。虽然说我的代码现在是经过测试过没问题的,但是我还是找了很久才找到错误的,这种大程序建议各位能测试一个函数就测试一个函数,否则最后一起测试找错误难度很高!

2025-07-17 17:50:25 1004 6

原创 C++进阶-map的应用

本文系统介绍了C++中map容器的扩展知识和应用实践。首先补充了map的多种插入方式、键值访问方法及operator[]的行为特性。然后通过力扣两道典型题目进行实战演练:在前K个高频词问题中,比较了基于map/multimap、stable_sort和自定义排序三种解法;在随机链表复制问题中,对比了C语言传统解法和利用map存储节点映射关系的C++优化解法。文章还简要提及了map的其他成员函数如find、count等,并预告后续将深入讲解AVL树等高级数据结构。全文通过代码示例详细展示了map在实际问题中的

2025-07-15 16:43:18 787

原创 C++进阶-map

本文介绍了C++ STL中的map容器。map是基于二叉搜索树实现的键值对容器,具有自动排序特性。文章详细讲解了map的声明方式、构造函数、operator[]操作符(可查找/插入元素)、at方法(安全访问)、emplace_hint高效插入等核心功能。特别强调了map与set的区别在于存储键值对,以及operator[]的独特行为(找不到键时会自动插入)。还介绍了辅助类pair的用法,以及key_comp/value_comp比较函数的使用。通过多个代码示例演示了map的基本操作,包括元素访问、修改和异常

2025-07-15 11:21:47 834 1

原创 C++进阶-set

本文系统介绍了C++ STL中的set容器的特性与使用方法。set作为关联式容器,基于红黑树实现,具有自动去重和排序功能,增删查效率为O(logN)。文章详细讲解了set的构造函数、常用成员函数(如emplace_hint、key_comp等)以及边界查找函数(lower_bound、upper_bound等),并通过代码示例演示了其具体用法。同时对比了set与multiset的差异,指出后者允许重复元素。最后通过两个力扣编程题(查找数组交集和环形链表入口)展示了set的实际应用场景,体现了其在数据去重和快

2025-07-14 13:02:57 607 1

原创 C++进阶-二叉搜索树(二叉排序树)

本文详细介绍了二叉搜索树(BST)的概念、性能分析和代码实现。主要内容包括:1. 二叉搜索树的基本概念和性质,即左子树值小于等于根,右子树值大于等于根;2. 性能分析,最优情况下查找效率为O(logN),最差退化为O(N);3. 重点讲解了二叉搜索树的插入、查找和删除操作,特别是删除操作需要考虑多种情况;4. 提供了不允许和允许插入相等值的两种实现代码;5. 强调了二叉搜索树作为AVL树和红黑树基础的重要性。文章通过具体代码示例展示了各操作的实现细节,帮助读者深入理解这一重要数据结构。

2025-07-13 17:17:13 1107 1

原创 C++进阶-多态2

本文详细讲解了C++多态的实现原理和使用方法。主要内容包括:1.纯虚函数和抽象类的定义与使用,说明纯虚函数强制派生类重写虚函数的作用;2.多态的实现原理,重点分析虚函数表指针(_vfptr)和虚函数表的结构,解释动态绑定的概念;3.通过具体代码示例演示多态的实现过程,包括基类和派生类虚函数表的差异;4.对比重载、重写和隐藏三者的区别;5.总结多态的核心思想和使用要点。文章通过调试结果和内存分析,深入探讨了虚函数表在运行时的作用机制,帮助读者理解多态在C++中的底层实现原理。

2025-07-13 11:51:25 781 1

原创 C++进阶-多态1

本文介绍了C++多态的概念与实现方法。主要内容包括:1. 多态分为编译时多态(函数重载、模板)和运行时多态(虚函数机制);2. 运行时多态的实现需要满足两个条件:基类指针/引用调用虚函数,且派生类完成虚函数重写;3. 详细讲解了虚函数、虚函数重写/覆盖的语法规则;4. 介绍了协变、析构函数重写等特殊情况;5. 讲解了C++11新增的override和final关键字的作用;6. 通过实例演示了多态的应用场景和注意事项。文章强调多态在C++中的重要性,并建议在实际开发中合理使用虚函数机制。

2025-07-12 12:09:00 948 1

原创 C++进阶-继承2

本文主要探讨C++继承中的关键问题。首先分析了派生类默认成员函数的生成规则,包括构造函数、拷贝构造、operator=和析构函数的调用顺序及注意事项。其次重点讨论了多继承中的菱形继承问题,揭示了数据冗余和二义性问题,并介绍了通过虚继承(virtual)的解决方案。最后对比了继承(is-a)与组合(has-a)的差异,指出组合具有更低的耦合度,建议优先使用组合而非继承,除非需要实现多态等特殊情况。文章还涉及派生类指针偏移等底层实现细节,为理解C++继承机制提供了全面指导。

2025-07-12 09:10:42 1009

原创 C++进阶-继承1

本文介绍了C++中面向对象编程的重要概念——继承。主要内容包括:1.继承的基本概念,通过Person、Student和Teacher类示例说明如何复用公共代码;2.继承的三种方式(public、protected、private)及其对基类成员访问权限的影响;3.基类与派生类间的转换规则(切片/切割);4.继承中的作用域和隐藏规则;5.继承与友元、静态成员的关系。文章强调public继承是最常用的方式,并指出继承是类设计层次的复用机制,能有效减少代码冗余。最后预告下一讲将深入探讨继承的更多特性。

2025-07-11 11:01:46 662 1

原创 C++初阶-模板进阶

本文深入探讨了C++模板编程的高级特性,主要包括:1. 非类型模板参数的应用与限制,如静态数组大小的控制;2. 模板特化的概念与实现,包括函数模板特化和类模板特化(全特化与偏特化);3. 模板分离编译的问题及解决方法;4. 模板参数中class与typename的使用区别,特别是在嵌套依赖类型和模板模板参数中的不同应用场景。文章通过具体代码示例详细讲解了这些高级模板特性的使用方法和注意事项,为C++进阶编程提供了重要参考。

2025-07-11 07:49:07 753 1

原创 C++初阶-仿函数

仿函数是C++中通过重载operator()实现函数调用行为的类对象,具有普通函数不具备的优势:(1)可维护内部状态;(2)可作为模板参数用于STL容器;(3)支持多态特性。仿函数广泛用于优先级队列等容器排序,比函数指针更灵活高效。C++11后Lambda表达式可替代部分仿函数功能,但复杂场景仍需仿函数。其核心价值在于支持泛型编程,提升代码质量和性能,是C++进阶学习的重要内容。

2025-07-10 14:49:01 864

原创 C++初阶-priority_queue(优先级队列)(堆)

本文详细介绍了C++标准库中的priority_queue容器。priority_queue是一个优先级队列,底层使用堆实现,默认大根堆(最大值优先),可通过仿函数改为小根堆。文章讲解了其构造函数、成员函数(empty、size、top、push/pop等)的使用方法,并给出了手动实现的完整代码。最后通过LeetCode例题展示了priority_queue的应用,比较了不同解法的时间空间复杂度。priority_queue在排序和优先级处理场景中非常实用,是C++中重要的容器之一。

2025-07-10 13:38:55 1038 1

原创 C++初阶-queue和deque(队列和双端队列)

摘要:本文介绍了C++中的queue和deque容器。queue是遵循FIFO原则的队列数据结构,支持基本操作如push、pop等。deque是双端队列,结合了vector和list的优点,支持两端高效插入删除和随机访问,但中间操作效率较低。文章详细解析了deque的底层实现(分段连续空间)和源码结构,并通过性能测试比较了deque和vector的效率差异。结论指出queue使用较少,deque虽功能丰富但效率不高,建议stack使用vector作为底层容器,queue使用list作为底层容器。

2025-06-16 18:45:47 878 1

原创 C++初阶-std::stack的讲解和使用

本文介绍了C++标准库中的std::stack容器及其应用。std::stack提供了empty()、size()、push()、pop()等基本栈操作,并通过三个典型题目展示了其实际应用:1) 最小栈的实现,使用辅助栈记录最小值;2) 判断栈的压入、弹出序列是否合法;3) 用两个栈实现队列功能,分别处理入队和出队操作。文章强调虽然std::stack功能简单,但在解决特定问题时非常实用,最后预告后续将讲解queue和deque相关内容。

2025-06-16 15:54:23 886 2

原创 数据结构课设-冒泡排序、快速排序、堆排序的性能比较(C++)

本文分享了一个数据结构课程设计的排序算法实现项目。项目包含冒泡排序、快速排序和堆排序三种算法,通过SortStats结构体统计比较次数、移动次数、额外空间和运行时间等性能指标。代码采用模板类设计,支持int/double/char/float等基本数据类型,并提供了随机数组生成功能。测试时用户可选择数据类型和数组规模,程序会输出各排序算法的性能对比结果。作者说明这是期末作业,代码仅供参考不宜直接抄袭,并提醒后续考试期间更新会减少。项目虽功能简单但完整实现了排序算法的性能比较,适合数据结构学习者参考。

2025-06-16 13:31:51 314 1

原创 C++初阶-list的模拟实现(难度较高)

这篇文章详细讲解了C++中list容器的模拟实现过程。主要内容包括:1) list基本结构的定义,使用双向链表实现;2) 无参构造函数和节点构造函数的实现;3) push_back等基本操作的实现;4) 迭代器类的设计与实现,包括普通迭代器和const迭代器;5) list类迭代器相关函数的实现;6) 增删查改等操作的实现;7) 拷贝控制成员函数和特殊成员函数的实现;8) 测试用例的编写。文章通过代码示例详细展示了list容器的底层实现原理,包括哨兵位的使用、迭代器封装等技术细节,并提供了完整的测试代码验证

2025-06-10 11:37:49 912 3

原创 C++初阶-list的底层

我们在C语言实现的双向链表的实现中,我们需要有两个结构体,一个是结点的结构,另外一个是双向链表的结构。T data;…………};…………};我们可以通过三个类的名字知道它们每个类的功能:_list_node是结点,_list_iterator是迭代器,list则是双向链表。list的实现源码还是比较复杂的,所以在之后的模拟实现中,可能会很难,但是,list使用确实也比较广泛,如果实在不理解模拟实现的还是建议了解一下,因为这个模拟实现主要还是为了提升我们的水平,以后面试可能要用到而已。

2025-06-10 08:49:25 1153 3

原创 C++初阶-list的使用2

是 C++ STL 中 list 容器的一个成员函数,用于根据特定条件移除列表中的元素。的带谓词版本允许你自定义判断相邻元素是否"唯一"的标准,而不仅仅是简单的相等比较。int age;{"Alice", 25}, // 重复{"Bob", 31}, // 不同{"Charlie", 40} // 重复// 移除姓名和年龄完全相同的连续记录// 剩余: Alice(25), Bob(30), Bob(31), Charlie(40)// 自定义谓词 - 只比较姓名});

2025-05-22 22:36:12 1095 2

原创 C++初阶-list的使用1

本文全面介绍了C++标准库中的std::list双向链表容器。作为带头节点的双向循环链表,std::list支持任意位置的O(1)时间复杂度的插入和删除操作。文章详细讲解了list的核心功能:1)构造函数和赋值操作;2)迭代器使用;3)容量相关操作(empty/size/max_size);4)元素访问(front/back);5)修饰符操作,重点包括assign、push/pop系列、emplace系列、insert/erase、swap和resize等。通过大量代

2025-05-22 12:50:02 1566 1

原创 C++初阶-vector的模拟实现3

本文主要介绍了C++11中std::initializer_list的特性及其在vector模拟实现中的应用。文章首先讲解了initializer_list的基本概念、主要特性和常见用途,包括接受列表的构造函数、基于范围的for循环等。然后重点阐述了vector中initializer_list构造函数的实现原理,并通过示例代码展示了其具体应用。此外,文章还详细分析了vector的其他构造函数实现,包括迭代器区间构造、n个val值构造等,并针对int类型参数匹配问题提出了解决方案。最后给出了完整的vecto

2025-05-21 18:30:21 1459 1

原创 C++初阶-vector的模拟实现2

本文总结了vector容器的模拟实现过程,主要包括resize、拷贝构造、赋值运算符重载等核心功能的实现。重点分析了reserve函数在扩容时使用memcpy导致浅拷贝的问题,提出了改用循环赋值的方式解决。同时讨论了现代写法的赋值运算符重载实现,并指出构造函数中成员变量初始化为nullptr的重要性。通过多个测试用例验证了各函数的正确性,特别是针对字符串类型数据的处理能力。文章最后提到initializer_list和更多构造函数的实现将在后续讲解中介绍。整体内容聚焦vector底层实现的细节问题,为深入理

2025-05-21 14:43:28 1212 2

原创 C++初阶-迭代器失效和vector::insert函数的最终实现

文章摘要:本文深入探讨了C++中迭代器失效问题及其解决方案。首先分析了vector::insert函数在不同情况下的迭代器失效现象,解释了扩容导致的野指针问题及其修复方法。接着探讨了erase操作引发的迭代器失效问题,指出不同编译器的差异性处理。文章还整理了各种容器(vector、deque、list、map等)在不同操作下的迭代器失效情况对比表,并提出了四种避免迭代器失效的实用方法:更新迭代器、使用索引、先收集再删除、谨慎使用reserve/rehash。最后强调理解迭代器失效机制对避免未定义行为的重要性

2025-05-20 22:05:51 1363

原创 C++初阶-vector的模拟实现1

本文介绍了vector容器的模拟实现过程,主要包含以下内容:1. 基本结构搭建,包括构造函数和析构函数;2. 实现了size()、capacity()、begin()、end()等基础函数;3. 提供了reserve()函数的初步实现版本;4. 实现了push_back()、pop_back()等常用操作;5. 完成了operator[]的重载和insert、erase函数的实现。文章特别指出当前版本的reserve()和insert()函数存在潜在问题,特别是涉及到迭代器失效的情况,这将在后续章节中重点讨

2025-05-20 22:05:34 863

原创 C++初阶-vector的底层

本文主要介绍了C++中vector容器的底层实现原理。首先讲解了std::sort函数的基本用法,然后重点分析了vector的核心实现机制。文章详细解读了vector的三个关键成员指针(start、finish、end_of_storage)的作用,以及size()、capacity()、max_size()等核心函数的实现原理。通过分析push_back、begin/end等函数的源码,揭示了vector动态扩容的内部机制(通常以2倍方式扩容)。最后指出vector作为顺序容器,其实现虽然代码量大但结构相

2025-05-19 18:52:33 898

原创 C++初阶-vector的使用

本文全面介绍了C++标准模板库中的vector容器。主要内容包括:1. vector的基本概念和结构,作为动态数组的实现;2. 详细讲解vector的成员函数,包括构造/拷贝函数、迭代器、容量操作、元素访问(重点介绍了data()函数)和修饰符(特别对比了emplace与insert的区别);3. 与string类的对比,指出vector缺少find等函数;4. 演示了使用std::find算法在vector中查找元素的方法。文章通过代码示例和理论说明相结合的方式,帮助读者深入理解vector的使用特性和注

2025-05-19 13:16:30 1229 1

原创 C++初阶-string类的模拟实现与改进

该讲主要是把一些补充的知识添加了一下,真正讲解的不是很多,到此,所有关于string类的内容已经讲解完全了,下一讲内容是vector,需要到下一周去了,之后可能会把一些string类的练习题的博客发出来,这个是不确定时间的!喜欢的可以一键三连哦!下讲再见!

2025-05-12 13:03:46 851

原创 C++初阶-string类的模拟实现3

这一讲的内容比较多,但是内容都比较简单,所以注意的点也不是很多,现在已经把重要的函数都实现完了,但是下一讲会把这些初级版本进行优化,也就是说,这个不是最终版本,最终的版本虽然实现比较复杂了,但是总归还是效率提升了,比如:我们如果一个一个字符提取,那么效率非常低,并且这个>>是有问题的,它涉及到其他的知识,下一讲一起讲了。喜欢的可以一键三连哦!下讲再见!

2025-05-12 10:17:31 1082

原创 C++初阶-string类的增删的模拟实现

这一节内容还是比较多的,而且理解起来比之前的提升了不只一个档次,下一讲的内容难度可能还会有过之而不及,所以说string类这个部分也是比较考验理解的。下一讲的内容快得话明天就可以发出来,喜欢的可以一键三连哦。下讲再见。

2025-05-11 16:50:12 842

原创 C++初阶-string类的模拟实现1

这里就先把那些比较重要的构造函数(除拷贝构造外)已经讲了,下一节将进行讲解:string类的增删查改的模拟实现,那些才是比较重要的部分,理解起来也比较难,所以下一节需要重点关注,喜欢的可以一键三连哦!

2025-05-11 13:58:16 1014

原创 C++初阶-string类的简单应用

这个题目其实我想在讲getline函数时就讲了,这个就是getline函数和rfind函数(我自己差点也忘记这个函数了)的应用了!//a.size()-1是真实长度//而再减去剩余的长度即真实长度//因为rfind是返回找到的元素的下标(若为字符串则返回最前的一个元素下标)这讲的题目比较经典,所以提前讲了,之后在把string类手动实现后我将讲解一些扩展的string题目,下节将讲解:string类的手动实现。喜欢的可以一键三连哦,下讲再见!

2025-05-07 22:41:24 999 1

原创 C++初阶-string类4

该讲已经把基本涉及string类的函数讲完了,而下讲将是string类的应用,只有几个简单的题目,因为之前的讲的函数太多了,而且C++讲了快一半了,没有练习一些也是不好的,所以感兴趣的可以看一下。喜欢的可以一键三连哦,下讲再见!

2025-05-07 21:20:01 757 1

原创 C++初阶-string类3

这一讲内容比较多,主要是我把一些不是很重要的函数讲的比较多了一些,而在这篇博客中有一些函数是与其他函数功能类似,有些函数功能也不是很大,所以我们主要是知道+=、[]、erase、swap这些函数的用法,其余的用处不是很大。下讲将讲解以下函数:这些函数基本上只要知道用法就可以了。喜欢的可以一键三连哦!下讲再见!

2025-05-01 13:04:41 1050 3

原创 C++初阶-string类2

这节课主要是讲了迭代器和capacity的知识,下节将讲解:以及一些扩容的额外的知识,所以一定要不能缺这些内容啊,因为下节的博客需要讲解的是string的增删查改的一部分内容,喜欢的可以一键三连哦!提前祝各位五一劳动节快乐啊!

2025-04-30 14:20:10 1061 3

原创 C++初阶-string类1

kw=string之后我们将围绕这个文档进行一系列string类的讲解。这篇博客讲了string的一些基本知识和一些成员函数的用法,但是由于string的成员函数比较多,所以需要下讲继续讲了,喜欢的可以一键三连哦!

2025-04-30 10:19:15 1032 3

原创 C++初阶-STL简介

STL(standard template library-标准模板库);是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。用简单易懂的话来说就是用模板实现数据结构和算法的库,我们在之前讲了顺序表、链表、二叉树等数据结构,这个库里面都包含,所以我们现在用STL就可以不用自己写数据结构和算法了,这样简化了我们的时间。

2025-04-27 21:46:14 1296 1

原创 C++初阶-模板初阶

class 类模板名// 类内成员定义和之前的方式一样,当然,不是因为它是类就只能用class来定义参数,也可以用typename定义参数,只是现在没学到后面,不知道二者的区别而已。// 类模版public:_size = 0;// 模版不建议声明和定义分离到两个文件.h 和.cpp会出现链接错误,具体原因后面会讲// 扩容++_size;

2025-04-27 20:53:51 797 2

原创 C++初阶-C/C++内存管理

delete p2;return 0;一般不用进行内存检查,其中new互调用自定义类型的构造函数进行初始化,而malloc是不会初始化的。而且delete还会调用自定义类型的析构函数。如果想初始化malloc的可以用for循环初始化,如果没有缺省值,我们可以A* p2=new A(1);

2025-04-23 21:55:19 956 5

原创 C++初阶-类和对象(下)

类和对象下难度还是相对高的,知识点也是有些需要了解,有些也是需要记住的,但是只要去深究那么这种东西也会很简单的。下节将讲解:C/C++内存管理,喜欢的可以一键三连哦!

2025-04-23 19:34:44 965 1

原创 C++初阶的应用-日期管理系统的设计与实现

我们如果把<<和>>置为成员函数,那么就会写为d1<<cout不符合我们的使用规范,至于返回值是这个的原因,我现在也没弄懂,但是只要会实现就可以了,主要是看懂代码,其他的东西基本上会到类和对象下来进行讲解。所以我没有过多的讲了,千万不要取关了啊!这个代码我只有一部分需要讲,其他的会在类和对象下讲解!

2025-04-20 22:17:05 332 2

空空如也

空空如也

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

TA关注的人

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