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笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
 
	