容器适配器

容器适配器

容器适配器

  • 没有实现底层的操作,其操作的实现是依赖其他容器
  • 没有实现自己迭代器

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

  • 大根堆的实现是依赖数组下标,因此需要使用连续的内存空间

猜你喜欢

转载自blog.csdn.net/weixin_43459437/article/details/143479275