容器适配器
容器适配器
- 没有实现底层的操作,其操作的实现是依赖其他容器
- 没有实现自己迭代器
stack
底层依赖
依赖deque
简略实现
template<typename T , typename Contianer = deque<T>>
class stack {
private:
Contianer con;
};
方法
入栈(Push):
s.push(value);
:将一个元素value
压入栈顶。
出栈(Pop):
s.pop();
:移除栈顶的元素。注意,这个操作不会返回被移除的元素。
获取栈顶元素(Top):
s.top();
:返回栈顶元素的引用,但不移除它。
检查栈是否为空:
s.empty();
:如果栈为空,返回true
;否则返回false
。
获取栈的大小:
s.size();
:返回栈中元素的数量。
queue
底层依赖
依赖deque
简略实现
同stack
方法
入队(Push):
q.push(value);
:将一个元素value
加入队尾。
出队(Pop):
q.pop();
:移除队头的元素。注意,这个操作不会返回被移除的元素。
获取队头元素(Front):
q.front();
:返回队头元素的引用,但不移除它。
获取队尾元素(Back):
q.back();
:返回队尾元素的引用,但不移除它。
检查队列是否为空:
q.empty();
:如果队列为空,返回true
;否则返回false
。
获取队列的大小:
q.size();
:返回队列中元素的数量。
priority_queue
底层实现
依赖vector,默认大根堆,擅长处理top K问题
方法
入队(Push):
pq.push(value);
:将一个元素value
加入优先队列,保持优先级顺序。
出队(Pop):
pq.pop();
:移除优先队列中优先级最高的元素(通常是最大的元素)。
获取最高优先级元素(Top):
pq.top();
:返回优先队列中优先级最高的元素的引用,但不移除它。
检查优先队列是否为空:
pq.empty();
:如果优先队列为空,返回true
;否则返回false
。
获取优先队列的大小:
pq.size();
:返回优先队列中元素的数量。
问题
1、stack、queue为什么不依赖vector
- deque的初始内存效率相较于vector更高,vector需要以0-1-2-4-8大小进行扩容;deque的第二维的大小4096 / sizeof(T)
- 对于queue来说出队效率deque更高
2、priority_queue为什么依赖vector
- 大根堆的实现是依赖数组下标,因此需要使用连续的内存空间