首页 > 编程笔记

C++ stack容器适配器的使用

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

图1 stack存储结构
图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 所示。

表1  stack元素操作函数含义
函数 含义
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

示例分析:

优秀文章