C++ stack容器适配器的使用
stack 中的元素具有后进先出的特点。stack 只能从一端插入、删除、读取元素,不允许一次插入或删除多个元素,且不支持迭代器操作。stack 存储结构如图 1 所示。

图1 stack存储结构
下面分别介绍 stack 的常见用法。
①创建空的 stack。
创建空的 stack,用于存储基本数据类型的元素,示例代码如下所示:
②创建存储序列容器的 stack。
创建存储序列容器的 stack,stack 的类型参数有两个,第一个类型参数为元素的数据类型,第二个类型参数为容器类型,示例代码如下所示:
【示例1】下面通过案例演示 stack 的具体用法,C++ 代码如下:
声明:《C++系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。

图1 stack存储结构
下面分别介绍 stack 的常见用法。
1) 创建stack
创建 stack主要有两种方式,分别如下所示。①创建空的 stack。
创建空的 stack,用于存储基本数据类型的元素,示例代码如下所示:
stack<int> st;上述代码创建了一个空的 stack 容器适配器 st,向 st 中插入元素可以调用 push() 函数。
②创建存储序列容器的 stack。
创建存储序列容器的 stack,stack 的类型参数有两个,第一个类型参数为元素的数据类型,第二个类型参数为容器类型,示例代码如下所示:
vector<int> v = { 1,2,3 }; //创建vector容器v stack<int,vector <int >> s(v); //创建stack容器适配器s,存储容器v
2) 元素访问
stack 除了具有 vector 容器相同功能的成员函数,如 empty()
、size()
、emplace()
和 swap()
函数,还提供以下操作函数,如表 1 所示。函数 | 含义 |
---|---|
top() | 返回栈顶元素的引用,即最后一个进入 stack 的元素 |
push(val) | 将元素 val 插入栈顶,无返回值 |
pop() | 删除栈顶的元素,无返回值 |
swap(s1,s2) | 交换两个 stack 中的元素,是非成员函数重载(C++11 ) |
【示例1】下面通过案例演示 stack 的具体用法,C++ 代码如下:
#include<iostream> #include<vector> #include<stack> //包含头文件stack using namespace std; int main() { vector<int> v = { 1,2,3 }; //创建vector容器v stack<int, vector<int >> s(v); //创建stack容器适配器s s.push(4); s.emplace(5); s.pop(); while (!s.empty()) { cout << " "<<s.top(); s.pop(); } return 0; }运行结果:
4 3 2 1
示例分析:- 第 7 行代码创建了 vector 容器 v;
- 第 8 行代码创建了stack 容器适配器 s,s 封装了容器 v;
- 第 9~10 行代码调用 push() 函数和 emplace() 函数向 s 中插入元素 4 和 5;
- 第 11 行代码调用 pop() 函数删除最后插入的元素(5);
- 第 12~16 行代码在 while 循环中调用 top() 函数获取最后插入的元素,然后调用 pop() 函数将最后插入的元素删除,直到 s 为空。
声明:《C++系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。