STL源码剖析
文章平均质量分 76
STL是一个C++通用库,被内建在支持C++的编译器内。它由“容器、迭代器、算法、函数对象、内存分配器和配接器”六大部分组成。作为一名C++开发人员,STL是必须掌握的知识,此外,他还是面试官必问的知识点。因此,我们不仅要会用,更要清楚各容器底层原理。本专栏将通过结合源码方式来剖析各容器的底层原理。
内核之道
某大厂资深技术专家,精通PostgreSQL内核、专注于『NVR、AI超脑、智能应用服务器』开发
展开
-
【003】源码剖析auto_ptr
文章目录1. auto_ptr概述2. auto_ptr使用3. auto_ptr源码实现4. auto_ptr特点5. 总结1. auto_ptr概述auto_ptr是C++中的智能指针工具之一,另外三个分别是:unique_ptr、shared_ptr和weak_ptr。对于这四个智能指针的原理实现、异同点,我将会用单独的文章篇幅从源码实现的角度去进行研究、讲解。本文的重点是分享auto_ptr智能指针。本文内容将包括:(1)auto_ptr智能指针的使用(2)auto_ptr的源码实现(3)原创 2022-03-16 11:03:34 · 596 阅读 · 0 评论 -
【004】为什么建议你在使用STL过程中,用empty()来替代size()判断容器是否有数据
文章目录1. empty()和size()2. empty()函数STL源码实现3. size()函数的STL源码实现4. 总结1. empty()和size()无论是序列化容器(vector、list、deque等)还是关联式容器(如map、multimap、set、multiset等)中,都提供了empty()和size()这两个成员函数,它们的作用分别是用来判断容器是否为空,以及获取容器大小。在开发中,我们通常需要对容器进行判空操作。empty()和size()都能够达到效果。如下演示代码:/原创 2022-03-24 15:32:12 · 2123 阅读 · 0 评论 -
【003】erase()删除vector容器中指针变量,会同时释放该指针变量的内存吗?
文章目录1. 概述2. 验证3. 源码分析erase() 4. 总结1. 概述若使用STL中的vector容器,用来存储指针变量(即char*),那么当我们使用erase()函数去删除该容器中的指针变量元素时候,该指针变量申请的内存空间地址会不会被erase()函数在底层给释放掉?这个问题是比较重要的。如果erase()函数不会去释放掉指针变量对应的内存空间,那么在我们没有手动去释放vector容器中的指针变量时候,会导致内存泄露,这是个十分严重的问题。2. 验证为了验证这个问题,我们写一个小de原创 2022-01-11 12:11:53 · 4488 阅读 · 0 评论 -
【002】STL源码获取渠道
文章目录1. gcc源码下载地址2. 下载步骤2.1 进入GCC mirror sites2.2 选择releases目录2.3 gcc所有版本序列2.4 选择对应版本的压缩包文件1. gcc源码下载地址 如果想探究gcc内部某些功能的实现细节,那么一定离不开gcc的源码,截止到2021-04-27,gcc已经发行了11.1.0版本。其下载地址是:GCC mirror sites 。 2. 下载步骤2.1 进入GCC mirror sites 进入gcc镜像站点,点击红色框中的原创 2021-05-08 14:41:25 · 347 阅读 · 0 评论