type
status
date
slug
summary
tags
category
icon
password
Property
标准库还定义了
stack
、queue
和 priority_queue
三种容器适配器。容器适配器可以改变已有容器的工作机制。所有容器适配器都支持的操作和类型:
定义一个适配器
每个适配都定义了两个构造函数:默认构造函数以创建一个空的对象,以及接收一个容器的构造函数并将适配器初始化为给定容器的拷贝。如假设
deq
是 deque<int>
可以将 deq
用于初始化 stack
:默认情况下,
stack
和 queue
是基于 deque
实现的,priority_queue
是基于 vector
实现的。可以在创建适配器时将一个命名的顺序容器作为第二个类型参数,来重载默认容器类型。所有适配器都要求容器具有添加和删除元素的能力,因此适配器不能构造在
array
上。适配器还要求容器具有添加、删除和访问尾元素的能力,因此也不能用 forward_list
构造适配器。stack 只需要
push_back
, pop_back
和 back 操作,所以可以将所有的剩下的容器类型用于 stack。queue 适配器需要 back, push_back
, front 和 push_front
操作,所以它可以建立在 list 或 deque 上而不能是 vector。priority_queue
除了 front, push_back
和 pop_back
操作以及快速随机访问,所以它可以建立在 vector 或 deque 上,而不能在 list 上。stack 适配器
栈适配器
stack
定义在头文件stack中,其支持的操作如下:虽然每个容器适配器的所有的操作都是用底层容器类型的操作进行定义的。但是我们只能使用适配器的操作,而不能使用底层容器类型的操作,如:
intStack.push(ix);
调用 deque 对象的 push_back
。尽管 stack 是使用 deque 实现的,却不能直接使用 deque 的操作,即不能在 stack 上调用 push_back
;相反,必须使用 stack 的 push 操作。queue 适配器
队列适配器
queue
和priority_queue
定义在头文件queue
中,其支持的操作如下:queue
使用先进先出(first-in,first-out,FIFO)的存储和访问策略。进入队列的对象被放置到队尾,而离开队列的对象则从队首删除。