码迷,mamicode.com
首页 > 其他好文 > 详细

STL组件

时间:2016-08-11 22:57:11      阅读:202      评论:0      收藏:0      [点我收藏+]

标签: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组件

标签:stl组件

原文地址:http://lingdandan.blog.51cto.com/10697032/1837044

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!