容器 | 插入 | 删除 | 查看 |
---|---|---|---|
deque | push_front(头插) push_back(尾插) | pop_back pop_front | back front |
vector | push_back | pop_back | back front |
queue | push | pop | back front |
stack | push | pop | top |
queue/stack
STL 提供的两个容器 queue (队列)和 stack(栈),其实都只不过是一种配接器(adapter),也即它们修饰 deque (双端队列)的接口而成就出另一种容器风貌。
deque vs vector
vector 是单向开口的连续线性空间,
- coll.push_back()
- coll.pop_back()
deque 是双向开口的连续线性空间(所谓)
- coll.push_back()/coll.push_front()
- coll.pop_back()/coll.pop_front()
vector 当然也可在头尾两端进行操作,头部效率奇差,每在头部插入一个元素都会涉及元素的移动
std::vector<int> v; for (int i = 0; i < 5; ++i) v.insert(v.begin(), 5-i);
deque 和 vector 的最大差异,
- deque 允许于常数时间内对起头端进行元素的插入和删除操作,vector 在头部的操作性能奇差
- deque 没有所谓的容量(capacity)观念,因为它是动态地以分段连续空间组合而成,随时可以增加一段新的空间并链接起来
vector 内存不足时:
- 重新配置一块更大的空间
- 复制元素
- 释放旧空间
这样的事情在 deque 将不会发生,也因此,deque 没有必要提供所谓的空间保留功能;