STL 容器简介

vector

vector是一个数组结构,插入、删除、查询、更新 操作和数组相似。

当插入的元素多于现有空间时,会自动new一个2倍现有空间的数组,将旧数据copy过去。


list

STL list 是一个双向链表,插入、删除、查询、更新 操作和链表相似。


deque

dequeue由一段一段的定量连续空间构成。一旦有必要在dequeue的前端或尾端增加新空间,便配置一段定量连续空间,串接在整个dequeue的头端或尾端。dequeue的最大任务,便是在这些分段的定量连续空间上,维护其整体连续的假象,并提供随机存取接口。避开了“重新配置、复制、释放”的轮回,代价是复杂的迭代器架构。

数据结构如下:

块:存放数据的地方

Map:是一个vector,标记dequeue中有哪些块、块的位置

Iteratordequeue的迭代器比较高级。dequeue结构特殊,但迭代器需要隐藏dequeue的结构。迭代器++--等操作时,可能跨越

 

根据dequeue的数据结构,很容易理解dequeue的操作。

push_backpush_frontpop_backpop_front操作很快,因为只需对第一个块或者最后一个快操作即可。

inserterase 类似于vectorinserterase都需要移动其他元素。不同于vector的是:vector只能向后移动;而dequeue是双向的,可前后移动。

 STL 容器简介_第1张图片


stack

Stack是一种先进后出的数据结构,它有两种实现方式:listdequue

很容易理解,将listdequeue都是双向的,接口略作修改即可。


queue

Queue是一种先进先出的数据结构,它有两种实现方式:listdequue

很容易理解,将listdequeue都是双向的,接口略作修改即可。

 

heap

Heap的底层用vector实现。具体操作很简单,不详述。


set

set的底层实现是红黑树(这货我懂一点,就是一个二叉平衡树)。所有元素的键都是自动排序的。Set不允许两个元素键值相同。multiset就另当别论了


map

map的底层实现也是红黑树,所有元素都是自动排序的。每个元素就是一组key-valuemap也不允许相同的keymultiMap就可以。


hashtable

hashtable是由vectorlist 构建一种数据结构。

插入新元素时,根据keyhash值决定了位于哪一个buckets vector中,之后加入bucket对应的list中。

查找和删除元素时,还是根据hash到对应的list中查找或删除元素。

 STL 容器简介_第2张图片

 

你可能感兴趣的:(C++,STL,容器)