- 博客(57)
- 收藏
- 关注
原创 C++11 -- 智能指针
本文介绍了C++的智能指针,首先阐述了智能指针引入的必要性,通过RAII机制解决内存泄漏问题。重点分析了标准库中的三种智能指针:auto_ptr通过所有权转移避免多次释放,但存在使用风险;unique_ptr禁止拷贝来解决释放问题;shared_ptr采用引用计数实现资源共享。详细讲解了shared_ptr的线程安全实现、定制删除器功能,以及weak_ptr解决循环引用问题。最后探讨了内存泄漏的概念、危害及检测防范措施。文章通过代码示例展示了各类智能指针的实现原理,为C++资源管理提供了系统解决方案。
2025-12-19 15:13:30
1561
原创 C++11 -- lambda、包装器和可变参数模板
本文介绍了C++11中的lambda表达式、包装器和可变参数模板三大特性。lambda表达式本质是匿名函数对象,支持捕获列表、参数列表和返回值类型定义,常用于STL算法和回调场景。std::function提供统一的可调用对象包装器,能封装函数指针、仿函数和lambda等。std::bind作为函数适配器,可调整参数顺序和绑定部分参数。可变参数模板通过参数包和递归展开机制支持变长参数处理。这些特性极大提升了C++的灵活性和表达能力,在泛型编程、函数式编程等场景中发挥重要作用。
2025-12-17 17:43:52
687
原创 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
922
原创 C++11 -- 列表初始化与变量类型推导
C++11是C++语言的重要更新版本,引入了多项关键改进。在初始化方面,提供了统一列表初始化语法,使用花括号{}简化各类对象的初始化操作,并新增initializer_list机制支持列表初始化。类型推导方面,auto关键字可自动推导变量类型,decltype则能获取表达式类型。新增nullptr关键字明确表示空指针。范围for循环简化了容器遍历语法。STL方面新增了array等容器,提供字符串转换函数,并为容器增加了emplace系列方法和右值引用支持。这些改进使C++代码更简洁、安全且高效。
2025-12-16 18:47:51
676
原创 C++ -- 异常
本文系统介绍了C++异常处理机制。首先对比了C语言处理错误的两种方式(终止程序和返回错误码)及其局限性。重点阐述了C++异常的概念,包括throw、catch、try关键字的使用方法,以及异常抛出与捕获的基本规则、重新抛出机制和异常安全注意事项。文章还详细说明了自定义异常体系的设计方法,介绍了C++标准库异常体系结构,并分析了异常的优缺点:虽然可能导致执行流混乱和资源管理问题,但相比错误码方式具有信息清晰、调用链简化等优势。最后指出尽管存在不足,异常处理仍是面向对象语言的主流错误处理方式。
2025-12-16 16:25:52
607
原创 C++ -- 位图与布隆过滤器
本文详细介绍了位图和布隆过滤器两种数据结构及其在海量数据处理中的应用。位图通过比特位存储状态,适用于无重复数据的快速查找,能有效节省内存空间。布隆过滤器则通过多个哈希函数降低误判率,适用于判断元素是否存在。文章还讨论了这两种结构的具体实现方法、优缺点以及应用场景,并给出了处理海量数据问题的实际解决方案,如TopK问题和哈希切分法。这些技术在处理大规模数据时展现出显著优势,能够平衡内存使用和查询效率。
2025-12-15 15:29:54
1295
原创 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
原创 C++ -- 哈希表
本文系统介绍了哈希表的核心概念与实现方法。首先阐述了哈希的基本思想:通过哈希函数建立键值与存储位置的映射关系,实现O(1)时间复杂度的操作。然后详细讲解了哈希函数设计(包括除法散列法、乘法散列法等)和冲突处理策略,重点分析了开放定址法(线性探测、二次探测、双重散列)和链地址法两种主要冲突解决方案。文章还提供了完整的C++实现代码,包括哈希表结构设计、扩容机制、插入/查找/删除操作等关键算法,并通过示例演示了哈希表的工作过程。最后比较了不同方法的优缺点,指出链地址法在实践中的优势。
2025-12-12 16:37:00
1461
原创 C++ -- STL【unordered_set和unordered_map的使用】
是一种关联式容器,它具有以下几个特点:# 具体可参考官方文档 ——。是 C++ 中的关联式容器,具有以下特性:# 具体可参考官方文档 ——。
2025-12-11 15:49:39
821
原创 C++ -- STL【set和map的模拟实现】
本文分析了STL中红黑树实现map和set的源码框架,并展示了模拟实现过程。主要内容包括:源码分析,模拟实现:改造红黑树节点结构,增加仿函数提取key进行比较,实现迭代器支持中序遍历;删除函数处理const key问题,迭代器支持const和非const版本;提供RBTree、set和map的完整代码,通过复用红黑树核心功能实现标准容器接口。最终测试验证了实现的正确性,展示了红黑树如何高效支持两种不同容器的需求。
2025-12-09 16:40:02
684
原创 C++ -- 红黑树
本文介绍了红黑树的实现,重点讲解了插入操作和查找接口。红黑树是一种近似平衡的二叉搜索树,通过颜色约束确保最长路径不超过最短路径的两倍。文章详细阐述了红黑树的五大规则、平衡机制和效率分析,并与AVL树进行了对比。核心内容包括红黑树的结构定义、旋转操作以及插入时的三种处理情况(变色、单旋+变色、双旋+变色)。最后提供了验证方法和测试用例,确保红黑树的正确性。红黑树在频繁修改的场景下性能优于AVL树,广泛应用于STL map/set、Java TreeMap等数据结构中。
2025-12-08 18:43:23
847
原创 C++ -- AVL树
AVL树是一种自平衡二叉搜索树,通过旋转操作确保左右子树高度差不超过1,从而保证查找、插入和删除操作的时间复杂度均为O(logN)。本文详细介绍了AVL树的概念、实现原理和核心操作,包括四种旋转方式(左单旋、右单旋、左右双旋和右左双旋)及其应用场景。通过代码实现展示了AVL树的插入、查找和平衡检测功能,并提供了测试用例验证其性能。AVL树相比普通二叉搜索树具有更好的平衡性,适用于需要高效查找操作的场景,如数据库索引等。
2025-12-07 18:17:46
999
原创 C++ -- STL【set/map和multiset/multimap的使用】
本文介绍了C++ STL中的关联式容器set和map。set是存储唯一元素的容器,底层采用红黑树实现,支持插入、删除、查找等操作。map是键值对容器,同样基于红黑树,提供[]运算符重载方便访问和修改值。文章详细讲解了两种容器的初始化、迭代器使用、常见成员函数,并通过例题展示了实际应用。此外还介绍了multiset和multimap的区别,它们允许键值冗余。最后介绍了pair结构体的使用,它是map存储键值对的基础结构。文章通过代码示例帮助理解这些容器的特性和使用方法。
2025-12-06 15:29:50
770
原创 C++ -- 二叉搜索树
本文介绍了二叉搜索树的基本概念、性能分析及实现方法。细讲解了二叉搜索树的插入、查找和删除操作实现,包括处理不同删除情况的四种方法。同时介绍了key和key/value两种应用场景,最后说明了二叉搜索树的深拷贝构造、析构和赋值重载的实现方法。这些内容为后续学习更高效的平衡二叉搜索树(AVL树和和红黑树)奠定了基础。
2025-12-05 15:37:32
792
原创 C++ -- STL【stack和queue的使用与模拟实现】
本文介绍了C++中常用容器stack、queue、priority_queue的使用与实现原理。首先讲解了stack(后进先出)和queue(先进先出)的基本操作与实现方式,重点分析了双端队列deque作为默认容器适配器的优势。然后详细阐述了优先级队列priority_queue的实现,包括堆的插入删除操作和仿函数的使用。最后介绍了逆波兰表达式的转换与计算方法,包括中缀转后缀的算法思路和运算过程。全文通过代码示例展示了这些数据结构的实际应用,为理解STL容器提供了实践参考。
2025-12-05 00:56:57
800
原创 C++ -- STL【list的模拟实现】
本文详细介绍了C++中list容器的实现原理和核心功能。list基于双向循环链表实现,包含节点结构体_list_node和迭代器类_list_iterator。重点内容包括: 迭代器实现、构造与销毁、容量操作、访问操作、修改操作。文章还讨论了模板的按需实例化特性,并提供了完整的list实现源码。整个实现体现了list作为链表结构的特性,包括不连续存储、双向遍历等。
2025-12-03 11:12:35
791
原创 C++ -- STL【list的使用】
本文介绍了C++中两种链表容器forward_list和list的主要特性及使用方法。详细讲解了list的初始化、迭代器使用、容量操作、元素访问和修改等常用接口,特别强调了list不支持随机访问,必须使用其内置的sort方法而非算法库的sort。通过多个代码示例展示了各种接口的具体用法,帮助开发者根据实际需求在内存效率和功能灵活性之间做出选择。
2025-12-02 21:01:38
1085
原创 C++ -- STL【vector的模拟实现】
本文介绍了如何模拟实现一个简易版vector容器。主要内容包括: 使用三个迭代器成员变量管理存储空间;实现多种构造函数及拷贝构造;提供基本容量操作;实现元素访问操作;完成修改操作,并处理迭代器失效问题;实现迭代器相关功能。文章重点阐述了深拷贝的必要性,以及在扩容时如何正确处理迭代器失效问题,最后给出了完整的vector实现源码。
2025-12-01 23:07:18
888
原创 C++ -- STL【vector的使用】
本文主要介绍了C++中vector容器的使用及其相关特性。首先对比了C语言数组和C++ vector的区别,重点阐述了vector的动态扩容机制。详细讲解了vector的常用接口,包括初始化、迭代器、容量操作、访问和修改操作等。特别分析了迭代器失效问题,包括扩容后失效、插入后失效和删除后失效三种情况。最后简要介绍了default关键字的使用和类名与类型的区别。文章通过大量代码示例展示了vector的实际应用,帮助读者深入理解这一重要容器的特性和使用方法。
2025-11-30 19:20:47
804
原创 C++ -- STL【string的模拟实现】
本文将介绍如何模拟实现 STL 的 string,包括其基本功能、数据结构、实现方法等,帮助读者深入理解字符串的操作和应用。
2025-11-30 16:36:06
640
原创 C++ -- STL【string的使用】
摘要:本文详细介绍了C++中的STL(标准模板库)及其字符串处理组件string类。首先对比了C语言字符数组和C++ string类的区别,突出string类的便捷性。然后重点讲解了string类的核心功能: 迭代器操作;多种初始化方式;容量操作;三种遍历方式(下标、迭代器、范围for);修改操作;其他实用功能(find/substr/c_str等)。通过代码示例展示了string类的各种用法,并比较了不同操作的效率差异,为C++字符串处理提供了全面的参考。
2025-11-28 23:56:57
452
原创 C++ -- 多态
本文深入解析了C++多态机制及其实现原理。首先介绍了多态的概念、定义及分类,重点阐述了虚函数的重写规则和特殊形式(协变、析构函数重写)。通过内存布局分析揭示了虚函数表的存在,详细说明了单继承和多继承情况下的虚表结构特点,并解释了多态调用的底层原理(动态绑定)。文章还探讨了菱形虚拟继承的复杂性,最后针对常见误区(如内联虚函数、静态虚函数等)进行了辨析。通过大量代码示例和内存分析,全面展示了C++多态的实现机制和使用要点。
2025-11-27 23:31:27
1604
原创 C++ -- 继承
本文系统介绍了C++继承机制的核心概念和应用场景。主要内容包括:继承的定义方式及其访问控制规则;基类与派生类的赋值转换规则(切片原理);继承中的作用域问题(同名成员隐藏);派生类默认成员函数的调用顺序;友元和静态成员在继承中的特性;重点分析了菱形继承问题及虚拟继承解决方案;对比了继承(is-a)和组合(has-a)两种代码复用方式的优缺点。文章通过大量代码示例详细阐述了继承机制的实现原理,特别是深入解析了虚拟继承通过虚基表指针解决数据冗余的底层机制,为理解面向对象程序设计中的类层次结构提供了全面指导。
2025-11-26 17:22:24
689
原创 C++ -- 模版
本文系统介绍了C++模板编程的核心概念和应用。主要内容包括:函数模板和类模板的基本语法及实例化方式(隐式/显式);非类型模板参数的应用场景;模板特化的两种形式(全特化和偏特化)及其实现方法;模板分离编译的问题与解决方案。文章通过交换函数、栈类等示例,详细阐述了模板编程如何实现类型无关的通用代码,并针对特殊类型处理介绍了特化技术。最后指出模板定义通常应放在头文件中以避免分离编译问题。全文深入浅出地讲解了模板编程的核心知识点,为C++泛型编程提供了实用指导。
2025-11-26 10:33:58
1170
原创 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
原创 C++ -- 类和对象【下】
本文详细讲解了C++中的隐式类型转换规则,并介绍了类的静态成员、友元、内部类、匿名对象的知识,还概述了对象拷贝时编译器的优化行为,最后通过模拟实现一个日期类巩固了类和对象的全部知识~
2025-11-23 17:16:25
969
原创 C++ -- 类与对象【上】
本文讲解了面向过程和面向对象的区别,并引入了类和对象的基本概念,还解读了类大小的计算方法、类的存储方式,并介绍了this指针和一些易错点
2025-11-20 21:26:27
567
原创 Linux -- 线程同步、POSIX信号量与生产者消费者模型
本文详细解读了什么是线程同步,并从条件变量和POSIX信号量两个方式分别构建了基于阻塞队列的多生产-多消费模型和基于环形队列的多生产-多消费模型,在其中还对条件变量和信号量进行了简单封装,浅显易懂~
2025-11-14 15:53:02
829
原创 Linux -- 线程互斥
本文详细解读了线程互斥的知识点,包括为什么多线程访问临界资源时要使用互斥锁、互斥锁的接口、互斥锁的底层原理等,并且还对互斥量进行了简易的封装~
2025-11-08 17:58:55
771
原创 Linux -- 线程控制
本文先从线程库开始谈起,逐步引入线程创建到线程终止、取消,到线程等待到线程分离最后到线程封装,并深入讲解了线程ID与内核LWP的关系,也讲述了线程栈和线程的局部存储话题。
2025-10-30 00:11:12
785
原创 Linux -- 线程概念
本文详细介绍了什么是线程,并通过多级页表的底层机制剖析了线程的原理,还介绍了线程的优缺点及线程异常、线程用途,最后对比了线程与进程的区别。
2025-10-15 14:35:19
722
原创 Linux -- 信号【下】
本文详细解读了操作系统是怎么运行的,剖析了硬件中断、时钟中断、软中断的具体实现方式,区分了中断、异常、陷阱、终止的概念,并 深入讲解了用户态与内核态切换的底层原理,最后介绍了什么是可重入函数、volatile关键字在进程控制中的用法,还补充了SIGCHLD信号的使用~
2025-10-09 20:16:54
1080
原创 Linux -- 信号【中】
本文详细介绍了信号的保存和捕捉/处理逻辑,解释了信号的三种状态(阻塞、未决、递达),剖析了信号在内核中的表示方法(pending、block、handler三张表),描述了sigset_t信号集的概念,介绍了sigpromask、sigpending函数,解读了用户空间、内核空间、用户态、内核态等概念,叙述了内核是如何对信号进行捕捉的,最后还简单提及了sigaction函数的使用~
2025-10-08 16:51:47
950
原创 Linux -- 信号【上】
本文首先详细解读了什么是信号、信号的本质,并且使用signal函数自定义捕捉信号,也详细介绍了前后台进程。接着剖析了信号产生的5种产生方法:终端按键、系统命令(kill)、系统调用(raise、abort)、硬件异常(除0错误、野指针错误等)、软件条件(SIGPIPE、SIGALRM、SIGCHLD),和各自的底层原理与核心机制。
2025-09-12 21:41:27
1188
原创 Linux -- 进程间通信【消息队列和信号量】
本文简单介绍了System V IPC消息队列的概念、函数及原理,还通过介绍共享资源、临界资源、临界区、非临界区、互斥、同步、原子性、锁等概念,引出信号量的概念,并描述了信号量的相关函数和工作原理,最后详细剖析了System V 3种IPC的关系和区别,并深入讲解了OS是如何管理IPC资源的。
2025-09-08 00:30:30
865
原创 Linux -- 进程间通信【System V共享内存】
本文详细开篇简单介绍了什么是System V通信,随后深入剖析了共享内存的定义及其原理,并且详细介绍了共享内存相关的函数,如shmget、shmat、shmdt、shmctl,而且对其中shmid和key的比较进行了深入的讲解,最后将共享内存与命名管道做对比,分析其各自的优缺点。
2025-09-01 22:52:12
899
原创 Linux -- 进程间通信【命名管道】
本文详细介绍了什么是命名管道,以及命名管道的创建和删除,且剖析了命名管道和匿名管道的区别,解读了命名管道的打开规则,最后还使用命名管道写了一段代码示例,示范了客户端和服务端之间的通信过程。
2025-08-29 21:26:07
826
1
原创 Linux -- 进程间通信【匿名管道】
本文介绍了什么是进程间通信IPC,并详细阐述了匿名管道及其底层原理和使用,并总结了管道的五种特性和四种通信情况,并给予匿名管道实现了一个简单的进程池。
2025-08-28 19:14:47
1020
原创 Linux -- 动静态库
本文详细介绍了动静态库怎么制作与使用,并从ELF格式开始讲起,深入讲解了ELF是如何形成可执行程序并从磁盘加载到内存的,并剖析了动静态链接的底层原理,重新更深入理解了进程地址空间。
2025-08-23 02:33:42
1000
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅