C++
文章平均质量分 97
獭.獭.
一只獭獭~
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++11 -- 智能指针
本文介绍了C++的智能指针,首先阐述了智能指针引入的必要性,通过RAII机制解决内存泄漏问题。重点分析了标准库中的三种智能指针:auto_ptr通过所有权转移避免多次释放,但存在使用风险;unique_ptr禁止拷贝来解决释放问题;shared_ptr采用引用计数实现资源共享。详细讲解了shared_ptr的线程安全实现、定制删除器功能,以及weak_ptr解决循环引用问题。最后探讨了内存泄漏的概念、危害及检测防范措施。文章通过代码示例展示了各类智能指针的实现原理,为C++资源管理提供了系统解决方案。原创 2025-12-19 15:13:30 · 1572 阅读 · 0 评论 -
C++11 -- lambda、包装器和可变参数模板
本文介绍了C++11中的lambda表达式、包装器和可变参数模板三大特性。lambda表达式本质是匿名函数对象,支持捕获列表、参数列表和返回值类型定义,常用于STL算法和回调场景。std::function提供统一的可调用对象包装器,能封装函数指针、仿函数和lambda等。std::bind作为函数适配器,可调整参数顺序和绑定部分参数。可变参数模板通过参数包和递归展开机制支持变长参数处理。这些特性极大提升了C++的灵活性和表达能力,在泛型编程、函数式编程等场景中发挥重要作用。原创 2025-12-17 17:43:52 · 687 阅读 · 0 评论 -
C++11 -- 右值引用和移动语义
本文系统介绍了C++11引入的右值引用及相关特性。主要内容包括:1)左值与右值的概念区分;2)左值引用与右值引用的语法及使用场景;3)移动语义(move语义)的实现原理;4)万能引用的概念及引用折叠规则;5)完美转发的实现方式(forward);6)类的新功能:移动构造/赋值、成员变量初始化、default/delete、final/override等特性。通过右值引用和移动语义,C++11显著提升了对象资源转移的效率,解决了传统拷贝操作带来的性能问题,为现代C++编程提供了更高效的资源管理方式。原创 2025-12-17 11:07:49 · 926 阅读 · 0 评论 -
C++11 -- 列表初始化与变量类型推导
C++11是C++语言的重要更新版本,引入了多项关键改进。在初始化方面,提供了统一列表初始化语法,使用花括号{}简化各类对象的初始化操作,并新增initializer_list机制支持列表初始化。类型推导方面,auto关键字可自动推导变量类型,decltype则能获取表达式类型。新增nullptr关键字明确表示空指针。范围for循环简化了容器遍历语法。STL方面新增了array等容器,提供字符串转换函数,并为容器增加了emplace系列方法和右值引用支持。这些改进使C++代码更简洁、安全且高效。原创 2025-12-16 18:47:51 · 678 阅读 · 0 评论 -
C++ -- 异常
本文系统介绍了C++异常处理机制。首先对比了C语言处理错误的两种方式(终止程序和返回错误码)及其局限性。重点阐述了C++异常的概念,包括throw、catch、try关键字的使用方法,以及异常抛出与捕获的基本规则、重新抛出机制和异常安全注意事项。文章还详细说明了自定义异常体系的设计方法,介绍了C++标准库异常体系结构,并分析了异常的优缺点:虽然可能导致执行流混乱和资源管理问题,但相比错误码方式具有信息清晰、调用链简化等优势。最后指出尽管存在不足,异常处理仍是面向对象语言的主流错误处理方式。原创 2025-12-16 16:25:52 · 607 阅读 · 0 评论 -
C++ -- 位图与布隆过滤器
本文详细介绍了位图和布隆过滤器两种数据结构及其在海量数据处理中的应用。位图通过比特位存储状态,适用于无重复数据的快速查找,能有效节省内存空间。布隆过滤器则通过多个哈希函数降低误判率,适用于判断元素是否存在。文章还讨论了这两种结构的具体实现方法、优缺点以及应用场景,并给出了处理海量数据问题的实际解决方案,如TopK问题和哈希切分法。这些技术在处理大规模数据时展现出显著优势,能够平衡内存使用和查询效率。原创 2025-12-15 15:29:54 · 1295 阅读 · 0 评论 -
C++ -- STL【unordered_set与unordered_map的实现】
本文详细分析了SGI-STL30版本中哈希表的实现,并基于此模拟实现了C++11中的unordered_set和unordered_map容器。主要内容包括: 源码分析、结构设计、关键实现: 哈希表节点结构改造、插入/删除迭代器实现、扩容机制和哈希冲突处理;特殊处理:string类型的哈希函数特化、unordered_set的key防修改机制、普通迭代器到const迭代器的转换。本文提供了完整的哈希表实现代码,并展示了如何基于哈希表构建unordered_set和unordered_map容器。原创 2025-12-14 17:05:09 · 691 阅读 · 0 评论 -
C++ -- 哈希表
本文系统介绍了哈希表的核心概念与实现方法。首先阐述了哈希的基本思想:通过哈希函数建立键值与存储位置的映射关系,实现O(1)时间复杂度的操作。然后详细讲解了哈希函数设计(包括除法散列法、乘法散列法等)和冲突处理策略,重点分析了开放定址法(线性探测、二次探测、双重散列)和链地址法两种主要冲突解决方案。文章还提供了完整的C++实现代码,包括哈希表结构设计、扩容机制、插入/查找/删除操作等关键算法,并通过示例演示了哈希表的工作过程。最后比较了不同方法的优缺点,指出链地址法在实践中的优势。原创 2025-12-12 16:37:00 · 1465 阅读 · 0 评论 -
C++ -- STL【unordered_set和unordered_map的使用】
是一种关联式容器,它具有以下几个特点:# 具体可参考官方文档 ——。是 C++ 中的关联式容器,具有以下特性:# 具体可参考官方文档 ——。原创 2025-12-11 15:49:39 · 827 阅读 · 0 评论 -
C++ -- STL【set和map的模拟实现】
本文分析了STL中红黑树实现map和set的源码框架,并展示了模拟实现过程。主要内容包括:源码分析,模拟实现:改造红黑树节点结构,增加仿函数提取key进行比较,实现迭代器支持中序遍历;删除函数处理const key问题,迭代器支持const和非const版本;提供RBTree、set和map的完整代码,通过复用红黑树核心功能实现标准容器接口。最终测试验证了实现的正确性,展示了红黑树如何高效支持两种不同容器的需求。原创 2025-12-09 16:40:02 · 684 阅读 · 0 评论 -
C++ -- 红黑树
本文介绍了红黑树的实现,重点讲解了插入操作和查找接口。红黑树是一种近似平衡的二叉搜索树,通过颜色约束确保最长路径不超过最短路径的两倍。文章详细阐述了红黑树的五大规则、平衡机制和效率分析,并与AVL树进行了对比。核心内容包括红黑树的结构定义、旋转操作以及插入时的三种处理情况(变色、单旋+变色、双旋+变色)。最后提供了验证方法和测试用例,确保红黑树的正确性。红黑树在频繁修改的场景下性能优于AVL树,广泛应用于STL map/set、Java TreeMap等数据结构中。原创 2025-12-08 18:43:23 · 851 阅读 · 0 评论 -
C++ -- AVL树
AVL树是一种自平衡二叉搜索树,通过旋转操作确保左右子树高度差不超过1,从而保证查找、插入和删除操作的时间复杂度均为O(logN)。本文详细介绍了AVL树的概念、实现原理和核心操作,包括四种旋转方式(左单旋、右单旋、左右双旋和右左双旋)及其应用场景。通过代码实现展示了AVL树的插入、查找和平衡检测功能,并提供了测试用例验证其性能。AVL树相比普通二叉搜索树具有更好的平衡性,适用于需要高效查找操作的场景,如数据库索引等。原创 2025-12-07 18:17:46 · 1003 阅读 · 0 评论 -
C++ -- STL【set/map和multiset/multimap的使用】
本文介绍了C++ STL中的关联式容器set和map。set是存储唯一元素的容器,底层采用红黑树实现,支持插入、删除、查找等操作。map是键值对容器,同样基于红黑树,提供[]运算符重载方便访问和修改值。文章详细讲解了两种容器的初始化、迭代器使用、常见成员函数,并通过例题展示了实际应用。此外还介绍了multiset和multimap的区别,它们允许键值冗余。最后介绍了pair结构体的使用,它是map存储键值对的基础结构。文章通过代码示例帮助理解这些容器的特性和使用方法。原创 2025-12-06 15:29:50 · 773 阅读 · 0 评论 -
C++ -- 二叉搜索树
本文介绍了二叉搜索树的基本概念、性能分析及实现方法。细讲解了二叉搜索树的插入、查找和删除操作实现,包括处理不同删除情况的四种方法。同时介绍了key和key/value两种应用场景,最后说明了二叉搜索树的深拷贝构造、析构和赋值重载的实现方法。这些内容为后续学习更高效的平衡二叉搜索树(AVL树和和红黑树)奠定了基础。原创 2025-12-05 15:37:32 · 792 阅读 · 0 评论 -
C++ -- STL【stack和queue的使用与模拟实现】
本文介绍了C++中常用容器stack、queue、priority_queue的使用与实现原理。首先讲解了stack(后进先出)和queue(先进先出)的基本操作与实现方式,重点分析了双端队列deque作为默认容器适配器的优势。然后详细阐述了优先级队列priority_queue的实现,包括堆的插入删除操作和仿函数的使用。最后介绍了逆波兰表达式的转换与计算方法,包括中缀转后缀的算法思路和运算过程。全文通过代码示例展示了这些数据结构的实际应用,为理解STL容器提供了实践参考。原创 2025-12-05 00:56:57 · 805 阅读 · 0 评论 -
C++ -- STL【list的模拟实现】
本文详细介绍了C++中list容器的实现原理和核心功能。list基于双向循环链表实现,包含节点结构体_list_node和迭代器类_list_iterator。重点内容包括: 迭代器实现、构造与销毁、容量操作、访问操作、修改操作。文章还讨论了模板的按需实例化特性,并提供了完整的list实现源码。整个实现体现了list作为链表结构的特性,包括不连续存储、双向遍历等。原创 2025-12-03 11:12:35 · 797 阅读 · 0 评论 -
C++ -- STL【list的使用】
本文介绍了C++中两种链表容器forward_list和list的主要特性及使用方法。详细讲解了list的初始化、迭代器使用、容量操作、元素访问和修改等常用接口,特别强调了list不支持随机访问,必须使用其内置的sort方法而非算法库的sort。通过多个代码示例展示了各种接口的具体用法,帮助开发者根据实际需求在内存效率和功能灵活性之间做出选择。原创 2025-12-02 21:01:38 · 1086 阅读 · 0 评论 -
C++ -- STL【vector的模拟实现】
本文介绍了如何模拟实现一个简易版vector容器。主要内容包括: 使用三个迭代器成员变量管理存储空间;实现多种构造函数及拷贝构造;提供基本容量操作;实现元素访问操作;完成修改操作,并处理迭代器失效问题;实现迭代器相关功能。文章重点阐述了深拷贝的必要性,以及在扩容时如何正确处理迭代器失效问题,最后给出了完整的vector实现源码。原创 2025-12-01 23:07:18 · 890 阅读 · 0 评论 -
C++ -- STL【vector的使用】
本文主要介绍了C++中vector容器的使用及其相关特性。首先对比了C语言数组和C++ vector的区别,重点阐述了vector的动态扩容机制。详细讲解了vector的常用接口,包括初始化、迭代器、容量操作、访问和修改操作等。特别分析了迭代器失效问题,包括扩容后失效、插入后失效和删除后失效三种情况。最后简要介绍了default关键字的使用和类名与类型的区别。文章通过大量代码示例展示了vector的实际应用,帮助读者深入理解这一重要容器的特性和使用方法。原创 2025-11-30 19:20:47 · 812 阅读 · 0 评论 -
C++ -- STL【string的模拟实现】
本文将介绍如何模拟实现 STL 的 string,包括其基本功能、数据结构、实现方法等,帮助读者深入理解字符串的操作和应用。原创 2025-11-30 16:36:06 · 642 阅读 · 0 评论 -
C++ -- STL【string的使用】
摘要:本文详细介绍了C++中的STL(标准模板库)及其字符串处理组件string类。首先对比了C语言字符数组和C++ string类的区别,突出string类的便捷性。然后重点讲解了string类的核心功能: 迭代器操作;多种初始化方式;容量操作;三种遍历方式(下标、迭代器、范围for);修改操作;其他实用功能(find/substr/c_str等)。通过代码示例展示了string类的各种用法,并比较了不同操作的效率差异,为C++字符串处理提供了全面的参考。原创 2025-11-28 23:56:57 · 459 阅读 · 0 评论 -
C++ -- 多态
本文深入解析了C++多态机制及其实现原理。首先介绍了多态的概念、定义及分类,重点阐述了虚函数的重写规则和特殊形式(协变、析构函数重写)。通过内存布局分析揭示了虚函数表的存在,详细说明了单继承和多继承情况下的虚表结构特点,并解释了多态调用的底层原理(动态绑定)。文章还探讨了菱形虚拟继承的复杂性,最后针对常见误区(如内联虚函数、静态虚函数等)进行了辨析。通过大量代码示例和内存分析,全面展示了C++多态的实现机制和使用要点。原创 2025-11-27 23:31:27 · 1604 阅读 · 0 评论 -
C++ -- 继承
本文系统介绍了C++继承机制的核心概念和应用场景。主要内容包括:继承的定义方式及其访问控制规则;基类与派生类的赋值转换规则(切片原理);继承中的作用域问题(同名成员隐藏);派生类默认成员函数的调用顺序;友元和静态成员在继承中的特性;重点分析了菱形继承问题及虚拟继承解决方案;对比了继承(is-a)和组合(has-a)两种代码复用方式的优缺点。文章通过大量代码示例详细阐述了继承机制的实现原理,特别是深入解析了虚拟继承通过虚基表指针解决数据冗余的底层机制,为理解面向对象程序设计中的类层次结构提供了全面指导。原创 2025-11-26 17:22:24 · 690 阅读 · 0 评论 -
C++ -- 模版
本文系统介绍了C++模板编程的核心概念和应用。主要内容包括:函数模板和类模板的基本语法及实例化方式(隐式/显式);非类型模板参数的应用场景;模板特化的两种形式(全特化和偏特化)及其实现方法;模板分离编译的问题与解决方案。文章通过交换函数、栈类等示例,详细阐述了模板编程如何实现类型无关的通用代码,并针对特殊类型处理介绍了特化技术。最后指出模板定义通常应放在头文件中以避免分离编译问题。全文深入浅出地讲解了模板编程的核心知识点,为C++泛型编程提供了实用指导。原创 2025-11-26 10:33:58 · 1171 阅读 · 0 评论 -
C++ -- 内存管理
本文系统讲解了C/C++中的内存管理机制,包括内存分布、动态内存分配和C++特有的内存管理方式。主要内容涵盖:内存五大分区及其存储内容;C语言malloc/calloc/realloc的区别与使用;C++中new/delete操作符对内置类型和自定义类型的处理机制;operator new/delete底层实现原理;定位new表达式的作用;malloc/free与new/delete的异同。通过代码示例详细说明了各内存区域的特性、动态内存分配的正确使用方法以及不匹配使用可能导致的后果。原创 2025-11-25 17:49:47 · 596 阅读 · 0 评论 -
C++ -- 类和对象【下】
本文详细讲解了C++中的隐式类型转换规则,并介绍了类的静态成员、友元、内部类、匿名对象的知识,还概述了对象拷贝时编译器的优化行为,最后通过模拟实现一个日期类巩固了类和对象的全部知识~原创 2025-11-23 17:16:25 · 969 阅读 · 0 评论 -
C++ -- 类和对象【中】
本文详细解读了类的6个默认成员函数,包括构造、析构、拷贝构造、赋值重载、取地址重载原创 2025-11-21 17:37:42 · 595 阅读 · 0 评论 -
C++ -- 类与对象【上】
本文讲解了面向过程和面向对象的区别,并引入了类和对象的基本概念,还解读了类大小的计算方法、类的存储方式,并介绍了this指针和一些易错点原创 2025-11-20 21:26:27 · 567 阅读 · 0 评论 -
C++ -- 基本语法【下】
C++⽀持在同⼀作⽤域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者类型不同。这样C++函数调⽤就表现出了多态⾏为,使⽤更灵活。C语⾔是不⽀持同⼀作⽤域中出现同名函数的。引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名,编译器不会为引⽤变量开辟内存空间,它和它引⽤的变量共⽤同⼀块内存空间。# 引用类似于指针,因为指向同一块空间,所以改变引用变量引用实体也会改变。# 以关键字inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开。原创 2025-03-09 22:00:11 · 768 阅读 · 2 评论 -
C++ -- 基本语法【上】
新手小白觉得C++门槛高?很难学? 看完此篇让你无痛入门C++,点个赞吧~原创 2025-03-04 11:42:22 · 932 阅读 · 4 评论
分享