标签:stl组件
空间配置器:
隐藏在容器的背后,负责空间的配置与管理
一级空间配置器(malloc_alloc)和二级空间配置器(default_alloc)
SGI标准空间配置器std::allocator ||未考虑效率
SGI特殊空间配置器std::alloc ||allocate() construct() destroy() deallocate()
二级空间配置器free lists、memory pool
内存处理工具 construct() destroy() uninitialized_copy()
uninitialized_fill() uninitialized_fill_n()
迭代器:
迭代器设计思维——STL的关键所在
迭代器是一种smart point 泛型指针
迭代器相应型别
Traits编程技巧
前闭后开
所有的容器都带有自己专属的迭代器,只有容器自己才知道如何遍历自己的元素
operator* -> ++ --
原生指针也是一种迭代器
容器:
序列式容器:
vector:vector采用的数据结构就是线性连续空间
vector是动态空间,随着元素的加入,会自动扩充空间,array静态空间
“配置空间/数据移动/释还旧空间”
对vector的操作,一旦引起空间重配置(push_back和insert的时候),会引起迭代器失效
list: 相比vector来说,对空间利用一点不浪费,插入删除永远是时间常数
双向链表,不保证存储空间连续,迭代器为Bidirectional Iterator
插入和删除操作都不会造成迭代器失效
list是一个双向环装链表
deque:vector是单向开口的连续线性空间
deque是双向开口的连续线性空间
关联式容器:
容器内部可能是RBTree 或hashTable ,所以依照其键值大小,以某种特定规则将元素插入,所以关联式容器没有所谓的头尾,只有最大元素和最小元素,所以也不会有push_back() begin()等类似操作
一般而言,关联式容器内部是一个平衡二叉树(BSTree、AVLTree、RBTree),但运用最广的是RBTree
set:(集合)
map:(映射表)
mutilset:(多键集合)
mutilmap:(多键映射表)
RBTree:也是一个独立容器,但并不对外开放
以下四种为SGI标准
hash_set:(散列集合)
hash_map:(散列映射表)
hash_multiset:(散列多键集合)
hash_multimap:(散列多键映射表)
算法:
各种常用算法,如sort search copy...
仿函数:
函数对象
行为类似函数,重载了operator()的类
可作为算法的某种策略
配接器:
以某种已有容器作为其底部结构
由于他们是以底部容器完成所有工作,具有这种“修改某物接口,形成另一种风貌”的性质,称为配接器
stack: SGI版本默认以deque作为其底层结构,也可以list作为底层容器 封闭一端
没有迭代器,“先进后出”
queue: 和stack底层基本一样,“先进后出”
priority_queue:priority_queue是一个拥有权值观念的queue
权值高的在最前面,大堆保证
缺省情况用max-heap完成,max-heap以vector 表示的完全二叉树实现
<stl_config.h>常量设定,让编译器根据不同的版本取舍变量
《完》
本文出自 “零蛋蛋” 博客,谢绝转载!
标签:stl组件
原文地址:http://lingdandan.blog.51cto.com/10697032/1837044