STL 浅入 容器 (一)

STL里的容器按元素在容器内的排序方式,分序列式和关联式。


C++中的array就是一个序列式容器,其中的元素集合呈线性关系。

STL中的序列式容器:<vector> <list> <deque> <stack> <queue> <priority_queue>等。其中stack和queue在技术上称之为适配器,即内部机制采用其他容器实现。

1.Vector

特征:类似数组,但可以空间大小自动随元素的数量改变。

vector的迭代器:由于其使用的是连续线性的空间,所以其迭代器实际就是原生指针,且为 Random Acccess Iterator.

注意:插入、删除操作会造成原有迭代器的失效。

2.List

特征:内存开销小适用广,因为是一个带头结点的环状双向链表,所以对任何位置的插入或删除需要的时间为常数(随数据规模增大)

list的迭代器:使用特定的iterator类,其为Bidirectional Iterator

注意:list不能使用STL提供的通用sort算法。因为sort算法只接受Random Access Iterator,所以提供了自己的sort算法。

3.Deque(双向队列)

特征:没有容量的概念,因为它是以分段的连续空间组合而成,随时可以增加一段空间拼接起来。

deque的迭代器:提供Random Acccess Iterator,但并不是原生指针。其实现复杂,也影响到相关算法的效率。

注意:非必要,应尽量使用vector而不是deque.的确需进行排序时,可以先将元素复制到vector,排序后再复制回deque.

4.Stack

特征:先进后出的数据结构,只可以在顶端进行元素操作。

stack不支持对元素的遍历,因此没有迭代器。

5.Queue

特征:先进先出的数据结构,实现方案和stack基本一样

6.Heap

STL定义了一些heap操作的算法:包括建堆,push_heap,pop_heap,sort_heap等

注意:heap并不是stl中的容器,以vector作为完全二叉树的存储结构,加上一些heap算法

7.Priority Queue

特征:拥有权值概念的queue,加入的元素按权值大小排列。

注意:priority_queue也是container adapter,它以vector为存储结构,再以heap算法进行处理:priority_queue的元素存放在一个vector当中,按元素权值排列成一个heap。


本文仅作学习记录,无任何商用目的。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值