
STL源码剖析
文章平均质量分 79
FishBear_move_on
github 地址 https://github.com/Jayhello
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
c++ set unordered_set区别
c++ std中set与unordered_set区别和map与unordered_map区别类似:set基于红黑树实现,红黑树具有自动排序的功能,因此map内部所有的数据,在任何时候,都是有序的。unordered_set基于哈希表,数据插入和查找的时间复杂度很低,几乎是常数时间,而代价是消耗比较多的内存,无自动排序功能。底层实现上,使用一个下标范围比较大的数组来存储元素,形成很多的桶,...原创 2018-09-06 20:55:33 · 21437 阅读 · 0 评论 -
STL map, hash_map , unordered_map区别、对比
首先:hash_map , unordered_map比较具体可见 stack overflow: Difference between hash_map and unordered_map?由于在C++标准库中没有定义散列表hash_map,标准库的不同实现者将提供一个通常名为hash_map的非标准散列表。因为这些实现不是遵循标准编写的,所以它们在功能和性能保证上都有微妙的差别...原创 2018-07-01 21:09:35 · 6362 阅读 · 0 评论 -
STL deque源码实现及分析
本文主要内容如下:1. 从整体上介绍STL deque,以及其与vector的区别2. deque迭代器的实现3. 通过分析deque的构造函数,从整体上理解deque的实现4. 分析为什么STL的 stack 默认使用deque而不是vector作为底层容器 分析实现源码,其实我们只用实现,理解几个核心的函数就可以明白其中的原理,并不需要全部的实现。太...原创 2018-06-21 20:59:29 · 1323 阅读 · 0 评论 -
C++ STL空间配置源码分析以及实现一
本文主要内容如下:1. STL为什么需要空间配置器2. STL空间配置器实现的原理3. STL空间配置器简单的测试前言很久以前看过侯捷先生的STL源码分析一书,也大致明白了STL实现的原理,但是对于编程而言,如果自己不去实现代码,调试代码,光看书,其实很难深刻的理解STL源码的逻辑(光是看书顶多也就是了解的水平,当然这是对于一般的程序员而言)。前段时间决定实现一...原创 2018-06-03 20:49:19 · 1845 阅读 · 1 评论 -
C++ STL空间配置源码分析以及实现二
本文主要内容如下:1. 在上篇文章的基础上,通过实现简单的vector来说明空间配置对容器的作用。2. c++中在已经分配好的内存上面构造对象(调用对象的构造函数),一般C++中new object会同时分配内存调用对象的构造函数。但是容器是在空间配置器已经分配好的内存上面直接构建对象(等价于调用对象的构造函数)3. C++11判断类型是否是pod(std::is_po...原创 2018-06-04 21:14:32 · 1557 阅读 · 0 评论 -
C++ STL源码实现以及分析之vector
本文主要内容如下:1. 前篇blogC++ STL空间配置源码分析以及实现二介绍了空间配置器allocator以及vector构造、析构函数的基本实现。2. 此篇blog主要通过一下几个方面,说明vector的实现原理vector的move构造函数的定义vector 的 erase clear pop_back 三个函数,以及size_t与 ptrdiff_t的区别ve...原创 2018-06-09 20:03:23 · 7201 阅读 · 1 评论 -
STL list源码分析以及实现
本文主要内容如下:1. STL list实现的三个模块节点__list_node,迭代器__list_iterator以及list本身(使用一个__list_node*代表整个链表)的介绍。2. 重点分析list的几个核心函数,理解STL list的实现原理,核心函数如下:list 的构造函数基本的迭代器操作插入操作 size, 析构函数等3. 测试实现的基本的lis...原创 2018-06-10 18:43:48 · 4772 阅读 · 1 评论 -
STL关联容器-红黑树
关联式容器分为set(集合)和map(映射)两大类,以及这两大类衍生体multiset(多键集合)和multimap(多键映射)。这些容器的底层机制均以RB-tree(红黑树)完成。RB-tree是一个独立的容器,并不开放给外界使用。此外SGI STL还提供了一个不再标准规格之列的关联式容器:hash table(散列表),以及以此hash table为底层机制而完成的hash_set(散列集...原创 2018-07-01 20:16:15 · 1034 阅读 · 1 评论 -
STL源码剖析-set容器
SGI STL中的容器set,以RB-Tree作为其底层的实现(rb_tree的大体分析见上文)。在set容器键值key和实值value是相同的,且在容器里面的元素是根据元素的键值自动排序的,同时我们不能修改set容器里面的元素值,所以set的迭代器是采用RB-Tree的const_iterator,不允许用户对其进行修改操作。首先,给出上面的rb_tree的更详细的定义(主要给出模板Valu...原创 2018-07-01 20:25:35 · 635 阅读 · 0 评论 -
STL源码剖析-map/multimap容器
本文主要简易分析STL-SGI的map源码分析。在map中对于rb_tree(源码分析)而言key, value不一样,key用于rb_tree排序,pair<key, value>才是rb_tree的节点,同样成员就一个rb_tree足已表现整个map:template <typename Key, typename Value, class Compare = std...原创 2018-07-01 20:33:34 · 906 阅读 · 0 评论 -
STL源码剖析-hashtable
hashtable(散列表)结构,在插入、删除、搜索等操作也具有”常数平均时间”的表现。hashtable概述举个例子,假设所有元素都是16bits,范围0~65535,简单的使用一个array即可以满足常数时间的插入、删除、搜索。创建数组array A,拥有65536个元素,索引号码0~65535,初始值全部为0当插入元素i就执行A[i]++,删除元素就执行A[i]–,如果搜...原创 2018-07-01 20:50:43 · 1103 阅读 · 0 评论 -
STL源码剖析-hash_set / hash_multiset
类似于标准的set以rb_tree为底层实现,hash_set以hashtable为底层实现,hash_set的底层操作也是由hashtable提供。运用set,为的是能够快速的搜索元素。这一点无论其底层是rb_tree或是hashtable,都可以达成任务。但是rb_tree有自动排序的功能,而hashtable是没有,反应的结果是set元素有自动排序功能,而hash_set没有。如下主...原创 2018-07-01 20:52:21 · 753 阅读 · 0 评论 -
STL源码剖析-hash_map / hash_multimap
类似于标准的map以rb_tree为底层实现,hash_map以hashtable为底层实现,hash_map的底层操作也是由hashtabe提供。运用map,为的是能够快速的根据key搜索元素。这一点无论其底层是rb_tree或是hashtable,都可以达成任务。但是rb_tree有自动排序的功能,而hashtable是没有,反应的结果是map元素有自动排序功能,而hash_map没有。...原创 2018-07-01 20:53:39 · 954 阅读 · 0 评论