
C++ STL源码剖析
以源码的角度分析STL库的实现,以SGI STL源码为版本,内容包括但不限于容器、迭代器、算法、函数对象等内容,最后感谢侯捷老先生的著作《STL源码剖析》
董哥的黑板报
90后程序员!
展开
-
入门篇!带你概览STL历史与实现版本、以及其六大组件(容器、算法、迭代器、仿函数、配接器、配置器)
一、STL概论长久以来,软件界一直希望建立一种可重复运用的东西, 以及一种得以制造出“可重复运用的东西”的方法,让工程师/程序员的心血不 致于随时间迁移、人事异动 、私心欲念、人谋不臧 而烟消云散。从子程序(subroutines)、程序(procedures)、 函式(functions)、类别(classes),到函式库(function libraries)、类别库(class libr...原创 2019-12-12 11:37:45 · 1516 阅读 · 0 评论 -
必不可少!STL源码目录结构分析,附加源码下载链接
一、STL源码的下载下载地址1:https://download.youkuaiyun.com/download/qq_41453285/12032659 这个网址中的源码为SGL STL版本,侯捷老先生的《STL源码剖析》书中使用的就是这个版本的源码(由于更新迭代,这些源码已经旧了,其中有些技术已经被新技术替代) 备注:本人博客就是以这个版本的STL来解析进行讲解的下载地址2:h...原创 2019-12-12 12:37:48 · 9448 阅读 · 23 评论 -
熬夜整理,万字讲解STL核心概念——iterator迭代器、Traits编程技术/偏特化、__type_traits编程技术
待续原创 2019-12-14 15:54:14 · 1137 阅读 · 0 评论 -
你不能不知道的内存分配,从全局概览STL的allocator空间配置器
一、空间配置器allocator介绍allocator是隐藏在STL组件(容器vector、map等)背后的,用来分配内存,这样STL容器才能有空间存放元素 为什么不说 allocator是内存配置器而说它是空间配置器呢?因为,空间不一定是内存,空间也可以是磁盘或其他辅助储存媒体。是的,你可以写一个 allocator, 直接向硬盘取空间二、空间配置器的标准接口allocator的使用...原创 2019-12-14 21:07:58 · 912 阅读 · 0 评论 -
必读篇!STL序列式容器vector源码剖析
vector的使用语法可以参考文章:https://blog.youkuaiyun.com/qq_41453285/article/details/86624816一、vector概述总的来说:vector是可变大小数组 特点: 支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢 元素保存在连续的内存空间中,因此通过下标取值非常快 在容器中间位置添加或删除元素非常耗时 一旦vect...原创 2019-12-16 22:04:36 · 1574 阅读 · 1 评论 -
必读篇!STL序列式容器list源码剖析
list的使用语法:https://blog.youkuaiyun.com/qq_41453285/article/details/86631615一、list概述总的来说:环形双向链表 特点: 底层是使用链表实现的,支持双向顺序访问 在list中任何位置进行插入和删除的速度都很快 不支持随机访问,为了访问一个元素,必须遍历整个容器 与其他容器相比,额外内存开销大 设计目的:令容器...原创 2019-12-16 22:39:40 · 916 阅读 · 2 评论 -
必读篇!STL序列式容器deque源码剖析
deque的使用语法:https://blog.youkuaiyun.com/qq_41453285/article/details/86631280一、deque概述总的来说:是一个双端队列 特点: 支持快速随机访问 在头尾插入/删除速度很快 deque是非常复杂的数据结构,由多个vector组成,迭代器使用时会在不同的区间跳转 存取元素的时候,deque的内部结构会多出一个间接过程,...原创 2019-12-19 22:14:48 · 1156 阅读 · 0 评论 -
必读篇!STL序列式容器stack源码剖析
stack的使用语法见文章:https://blog.youkuaiyun.com/qq_41453285/article/details/86637981一、stack概述stack是一种先进后出(First In Last Out,FILO)的数据结构。它只有一个出口, 形式如下图所示特点: stack允许新增元素、移除元素、取得最顶端元素。但除了最顶端外,没有任何其他方法可以存取stac...原创 2019-12-20 13:52:12 · 713 阅读 · 0 评论 -
必读篇!STL序列式容器queue源码剖析
queue的使用语法见文章:https://blog.youkuaiyun.com/qq_41453285/article/details/86638592一、queue概述queue是一种先进先出(First In First Out,FIFO)的数据结构。它有两个出口,形式如下图所示特点: queue允许新增元素、移除元素、从最底端加入元素、取得最顶 端元素 但除了最底端可以加入、最顶...原创 2019-12-20 14:02:25 · 823 阅读 · 0 评论 -
优先级队列核心!STL heap算法源码剖析
一、heap概述heap并不归属于 STL 容器组件 binary heap作为priority queue的底层实现机制。顾名思义,priority queue允许使用者以任何次序将任何元素推入容器内,但取出时一定是从优先权最高(也就是数值最高)之元素开始取。binary max heap正是具有这样的特性,适合做为priorityqueue的底层机制heap作为priority qu...原创 2019-12-20 20:28:42 · 1193 阅读 · 2 评论 -
必读篇!STL序列式容器priority_queue源码剖析
priority_queue的使用语法见文章:https://blog.youkuaiyun.com/qq_41453285/article/details/86638592一、priority_queue概述priority_queue是一种以权值进行排序的queue。由于其也是一个队列,因此也遵循先进先出(FIFO)的原则,其形式如下图所示:特点: priority_queue会对队列中的...原创 2019-12-20 20:49:16 · 1064 阅读 · 1 评论 -
一篇足矣,带你吃透STL源码中的平衡二叉搜索树AVL-tree与RB-tree(红黑树)
一、定义AVL tree是一个“加上了额外平衡条件”的二叉搜索树。其平衡条件的建立是为了确保整棵树的深度为 AVL tree要求:任何节点的左右子树高度相差最多为1 例如:下面左图是一个AVL tree,但是插入了节点11之后就不是AVL tree了二、非AVL tree的调整如果是添加、删除节点导致一个AVL tree变为非AVL tree。只要调整“插入点至根节点”路径上、平...原创 2019-12-21 16:33:54 · 1153 阅读 · 0 评论 -
必读篇!STL关联式容器set、map、multiset、multimap源码剖析
set语法使用参阅:https://blog.youkuaiyun.com/qq_41453285/article/details/100620892 map语法使用参阅:https://blog.youkuaiyun.com/qq_41453285/article/details/100609447一、setset的特性set所有元素都会根据元素的键值自动被排序 set中的键值就是实值,实值就是键值 ...原创 2020-02-10 16:28:30 · 1010 阅读 · 0 评论 -
一篇足矣,带你吃透STL源码中hash table(哈希表)与关联式容器hash_set、hash_map
前面介绍的二叉搜索树和平衡二叉搜索树。二叉搜索树具有对数平均时间的表现,但这样的表现构造在一个假设上:输入数据有足够的随机性 文本要介绍一种名为hash table(哈希表/散列表)的数据结构,这种结构在插入、删除、搜索等操作上也具有“常数平均时间”的表现,而且这种表现是以统计为基础,不需依赖输入元素的随机性 哈希表可以在本人的数据结构文章中查看,文本就不再详细介绍了:https://blog...原创 2020-02-11 21:06:30 · 3060 阅读 · 2 评论 -
STL算法总体概览
一、什么是算法算法,问题之解法也 广义而言,写的每个程序都是一个算法,其中的每个函数也都是一个算法 下面的一些文章我们将探讨极具复用价值的70余个STL算法,包括排序(sorting)、查找(searching)、排列组合(permutation)、以及用于数据移动、赋值、删除、比较、组合、运算等的算法 特定的算法往往搭配特定的数据结构,例如二叉搜索树(binary search tre...原创 2020-02-12 10:27:00 · 986 阅读 · 0 评论 -
算法篇!带你领略STL的数值算法<numeric>
本文介绍数值算法: accumulate adjacent_difference inner_product partial_sum power itoa 这些算法STL内部实现于<stl_numberic.h>中,应用层实现应该包含头文件<numberic>一、accumulate功能:默认情况下,用来计算init和[first,last...原创 2020-02-12 19:38:10 · 908 阅读 · 0 评论 -
算法篇!带你领略STL的算法<algorithm>
STL标准没有区分基本算法或复杂算法,但是SGI却把一些常用的基本算法定义在<stl_algobase.h>中,其他算法定义与<stl_algo.h>中(其他算法将会在后面的文章介绍) 应用层使用的头文件<algorithm>包含<stl_algobase.h>与<stl_algo.h> 本文介绍的算法有: equal fill...原创 2020-02-13 14:23:37 · 975 阅读 · 0 评论 -
算法篇!带你领略STL的set算法与heap算法<algorithm>
应用层使用的头文件<algorithm>包含<stl_algobase.h>与<stl_algo.h> 本文介绍的算法有: set_union set_intersection set_difference set_symmetric_difference set算法总体概述STL一共提供了4种与set相关的算法,分别为:并集(unio...原创 2020-02-14 19:47:55 · 848 阅读 · 0 评论 -
重点难点,STL仿函数(函数对象)源码剖析
待续原创 2020-02-15 17:47:32 · 7682 阅读 · 9 评论 -
STL配接器原理详解——容器配接器(container adapters)
一、配接器介绍STL提供的各种配接器中: 改变仿函数接口者:称为function adapter 改变容器接口者:称为container adapter 改变迭代器接口者:称为iterator adapter 二、容器配接器介绍STL提供的两个容器queue和stack,其实都只是配接器而已 它们都是修饰deque的接口而形成另一种容器风格 queue和stack源码在...原创 2020-02-18 14:59:30 · 1427 阅读 · 0 评论 -
STL配接器原理详解——迭代器配接器(iterator adapters)
一、配接器介绍STL提供的各种配接器中: 改变仿函数接口者:称为function adapter 改变容器接口者:称为container adapter 改变迭代器接口者:称为iterator adapter 二、迭代器配接器介绍待续...原创 2020-02-19 21:06:25 · 1416 阅读 · 0 评论 -
STL配接器原理详解——仿函数配接器(function adapters)
待续原创 2020-02-20 12:52:13 · 1315 阅读 · 0 评论