🍆容器适配器
2022-5-20
| 2023-8-2
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property

 
标准库还定义了 stackqueuepriority_queue 三种容器适配器。容器适配器可以改变已有容器的工作机制。
所有容器适配器都支持的操作和类型:
notion image

定义一个适配器

每个适配都定义了两个构造函数:默认构造函数以创建一个空的对象,以及接收一个容器的构造函数并将适配器初始化为给定容器的拷贝。如假设 deq 是 deque<int> 可以将 deq 用于初始化 stack
默认情况下,stackqueue 是基于 deque 实现的,priority_queue 是基于 vector 实现的。可以在创建适配器时将一个命名的顺序容器作为第二个类型参数,来重载默认容器类型。
所有适配器都要求容器具有添加和删除元素的能力,因此适配器不能构造在 array 上。适配器还要求容器具有添加、删除和访问尾元素的能力,因此也不能用 forward_list 构造适配器。
stack 只需要 push_backpop_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中,其支持的操作如下:
notion image
虽然每个容器适配器的所有的操作都是用底层容器类型的操作进行定义的。但是我们只能使用适配器的操作,而不能使用底层容器类型的操作,如:intStack.push(ix);调用 deque 对象的 push_back。尽管 stack 是使用 deque 实现的,却不能直接使用 deque 的操作,即不能在 stack 上调用 push_back;相反,必须使用 stack 的 push 操作。
 

queue 适配器

队列适配器queuepriority_queue定义在头文件queue中,其支持的操作如下:
notion image
notion image
queue 使用先进先出(first-in,first-out,FIFO)的存储和访问策略。进入队列的对象被放置到队尾,而离开队列的对象则从队首删除。
 
  • C++
  • 额外的string操作关联容器
    目录