关于SGI STL中的容器的简介

关于SGI STL中的容器的简介

SGI STL主要含有两类容器:序列式容器和关联式容器。

序列式容器(Sequence Container)

标准:array(build-in), vector, heap, priority-queue;
非标准: list, slist, deque;
配接器:stack, queue。
1. vector
单向开口连续线性动态空间,一般采用倍加扩容,分摊常数时间O(1);迭代器为Random Access Iterator(随机访问迭代器),底层的实际类型为T*。
2. list
双向环状链表,所以数据只要一个节点即可(尾端空白节点);迭代器为bidiractional Iterator(双向迭代器)。
3. deque
双向队列,双向开口的连续线性空间,迭代器为Random Access Iterator;
与vector相比,对头部插入删除操作仅需常数时间O(1);且没有capacity观念。
4. stack
栈,FILO:first in last out;
容器配接器Adapter,默认以deque为底层容器,还可以list和vector,不提供遍历功能和迭代器。
5. queue
队列,FIFO:first in first out;
容器配接器Adapter,默认以deque为底层容器,还可以list为底层容器,但是不能以vector为底层容器,不提供遍历功能和迭代器。
6. heap
堆,以算法形式给出。
7. priority_queue
优先队列,FILO: first in largest out;
容器配接器Adapter,默认以vector为底层容器,以heap算法为辅,不提供遍历功能和迭代器。
8. slist
单向链表,不在标准规范内,迭代器类型是Forward Iterator。

关联式容器(Associative Container)

关联式容器主要分为set(集合)和map(映射表),以及衍生multiset(多键集合)multimap(多键映射表),底层均以RB-Tree(红黑树)完成。
非标准的关联式容器hashtable(散列表),以及与之为底层的hash_set(散列集合),hash_map(散列映射表),hash_multiset(散列多键集合),hash_multimap(散列多键映射表)。

  1. set
    根据value自动排序,迭代器类型set::iterator定义为RB-tree::const_iterator,所以无法通过迭代器改变set元素的值。
  2. map
    迭代器类型map::iterator定义为RB-tree::iterator,可以通过改变迭代器改变元素的实值(value),但无法通过迭代器改变元素的键值(key);
  3. hashtable
    字典结构,在插入,删除,搜寻等操作上具有常数时间。
  4. hash_set
    set以RB-tree为底层实现,hash_set则是以hashtable为底层实现,RB-tree与hashtable相比较具有自动排序功能,故set较hash_set具有自动排序。

猜你喜欢

转载自blog.csdn.net/qq_25467397/article/details/80170672