STL源码分析
STL源码的简单分析,源自侯捷《STL源码剖析》
若澜_
一只夹缝生存的倔强程序员
展开
-
深入理解空间配置器
我们都知道STL里有很多容器,如vector,stack,queue等等,每个容器都是通过配置器来获取存储空间的,现在来总结下配置器原理当我们创建一个对象时常用方式是new,销毁一个对象用deleteT* a = new T;Delete a;对于new 其实是先调用为其配置内存,再调用相应的构造函数,对于delete是先调用析构函数再释放内存内存配置操作是有a...原创 2020-01-05 22:06:30 · 338 阅读 · 0 评论 -
STL源码分析之Map
map和set一样是关联式容器,它们的底层容器都是红黑树,区别就在于map的值不作为键,键和值是分开的,在map的红黑树中排序依据是键值,所以其键值也不能修改,来看其具体的源码定义template <class Key, class T, class Compare = less<Key>, class Alloc = alloc>class map {pub...原创 2020-01-15 10:24:06 · 239 阅读 · 0 评论 -
STL源码分析之pair
pair主要是用于map中,它的实现代码很简单,构造的操作也较少#ifndef __SGI_STL_INTERNAL_PAIR_H#define __SGI_STL_INTERNAL_PAIR_H__STL_BEGIN_NAMESPACEtemplate <class T1, class T2>struct pair{ typedef T1 first_t...原创 2020-01-15 09:52:53 · 184 阅读 · 0 评论 -
STL源码分析之红黑树
主要分析一下STL里的红黑树,红黑树相对来说是一种较为复杂的数据结构,具体的学习方法建议看那种带有很多图解的博客,先理解其原理流程,再自己写下代码,其实就能理解了。STL里红黑树的实现有几个特点,一个它设置了一个空头结点header,它的左节点指向树最小元素,有节点指向树最大元素,实际带有有意义值的头结点为root,root的父节点为header.这使在一些插入删除操作时要讨论下特殊情况,附上代码...原创 2020-01-08 17:46:40 · 172 阅读 · 0 评论 -
STL源码分析之stack,queue
stack是把容器封装后的产物,底层实现是deque容器,只是改变了容器的接口,所有代码就简单得多template <class T, class Sequence = deque<T> >template <class T, class Sequence>class stack { friend bool operator== __...原创 2020-01-06 22:49:15 · 97 阅读 · 0 评论 -
STL源码分析之List
list是个环形双向链表,里面的迭代器类型是bidirectional_iterator_tag,可以双向移动,不想vector里可以随机访问。同时删除或添加结点对其他的迭代器无影响。List也有sort函数,我们知道sort函数只支持随机访问型迭代器,所有它的sort是自己另外声明的。下面是源码分析,基本都标注了各函数功能和分析template <class T>struct...原创 2020-01-06 18:28:44 · 121 阅读 · 0 评论 -
STL源码分析之vector
Vector是序列容器的一种,分配的是一段连续的空间,所以它支持下标访问,同时它另一特点是可以自行扩充空间,每次是以原大小两倍来扩充,是另外配置的一块空间,将原内容拷贝过去,所以当对vector的空间进行重新配置时,指向原vector的迭代器就失效了。下面分析它具体是怎么实现的和熟悉下vector内部函数迭代器里面主要有三个迭代器iterator start; ...原创 2020-01-05 22:39:28 · 101 阅读 · 0 评论