文章目录
一、容器适配器
接下来介绍 3 种容器适配器,分别是 stack、queue、priority_queue:
- stack:是一个封装了 deque 容器的适配器类模板,默认实现的是一个后入先出(Last-In-First-Out,LIFO)的压入栈。stack 模板定义在头文件 stack 中。
- queue:是一个封装了 deque 容器的适配器类模板,默认实现的是一个先入先出(First-In-First-Out,LIFO)的队列。可以为它指定一个符合确定条件的基础容器。queue 模板定义在头文件 queue 中。
- priority_queue:是一个封装了 vector 容器的适配器类模板,默认实现的是一个会对元素排序,从而保证最大元素总在队列最前面的队列。priority_queue 模板定义在头文件 queue 中。
简单的理解容器适配器:将不适用的序列式容器(包括 vector、deque 和 list)变得适用
功能如下:
| container addaptor | characteristic | functions |
|---|---|---|
| stack | LIFO | push()、pop()、top() |
| queue | FIFO | push()、pop()、front()、back() |
| priority_queue | first item is the greatest priority | push()、pop()、top() |
三类容器适配器均无迭代器,因此访问元素的唯一方式是遍历容器,通过不断移除访问过的元素,去访问下一个元素
二、stack容器
1. stack的特点与使用

栈中存储的元素满足“后进先出(简称LIFO)”的准则,stack 适配器也同样遵循这一准则。
由于 stack 适配器以模板类 stack<T,Container=deque<T>>(其中 T 为存储元素的类型,Container 表示底层容器的类型)的形式位于头文件中,并定义在 std 命名空间里。第二个参数默认为 deque,可以指定第二个参数的类型,只要该容器支持 empty()、size()、back()、push_back()、pop_back() 这 5 个成员函数即可,如:vector、deque 和 list:
std::stack<std::string, std::list<int>> values;
2. stack的成员函数
| 函数 | 功能 |
|---|---|
| size() | 返回元素个数 |
| empty() | 若stack为空则返回true |
| top() | 返回栈顶元素的引用&,栈空则报错 |
| push(const T& val) | 将val压栈,利用了push_back()来实现 |
| pop() | 弹栈操作 |
举例:
#include <iostream>
#include <stack>
#include <list>
using namespace std;
int main()
{
stack<int> s;
stack<int, std::list<int>> s1;
s.push(2);
s.push(5);
s.push

本文介绍了C++ STL中的三种容器适配器:stack、queue和priority_queue。详细讲解了它们的特点、使用方法及成员函数,并提供了示例代码。
最低0.47元/天 解锁文章
1432

被折叠的 条评论
为什么被折叠?



