目录
- [1 stack 的概念](#1 stack 的概念)
- [2 stack 的构造方式](#2 stack 的构造方式)
- [2 stack 的常用接口](#2 stack 的常用接口)
-
- [2.2 stack 的操作](#2.2 stack 的操作)
-
- [2.2.1 empty()](#2.2.1 empty())
- [2.2.2 size()](#2.2.2 size())
- [2.2.3 top()](#2.2.3 top())
- [2.2.4 push()](#2.2.4 push())
- [2.2.5 pop()](#2.2.5 pop())
- [2.2.6 swap()](#2.2.6 swap())
stack 的技术文档: 文档链接
1 stack 的概念
stack 是 STL 容器之一,它实现自数据结构当中的栈
与数据结构中的栈相同,stack 也只能在栈顶插入数据,删除数据,遵循后进先出的原则
要注意,这里的栈指的不是内存当中用来存放形参,局部变量的栈,而是一种用来存放数据,操作受限的线性表
要使用 stack,就需要包含头文件 stack,由于容器都是定义在 std 命名空间下的,所以还需要指定命名空间 std
cpp
#include <stack>
2 stack 的构造方式

在构造 stack 时,要使用以下的语法:
cpp
stack<数据类型, 内部所用的数据结构> 对象名();
其中,数据类型和对象名是必须要给定的,内部所用的数据结构与括号这两个信息不是必须的,如果不指定内部所用的数据结构,那么 stack 的内部用的结构就是 deque(一种顺序表和链表的结合),指定了内部所用的数据结构则使用指定的。
构造 stack 有两个方式:
(1)构造空的 stack
对象名后不加括号,就是在构造空的 stack
cpp
int main()
{
stack<int> s1;
return 0;
}
(2)通过已有的容器对象来构造 stack
用这种方式构造 stack 时,需要将 stack 内部所用的数据结构更改为用来初始化 stack 的容器对象的结构
cpp
int main()
{
vector<int> v1(2, 200); //用来初始化栈的vector
stack<int, vector<int>> s1(v1); //构造栈所用的数据结构需要更改为vector
return 0;
}
2 stack 的常用接口
2.2 stack 的操作
stack 的操作主要有:
| 接口名称 | 功能 |
|---|---|
| empty | 检查栈是否为空 |
| size | 获取栈中的元素个数 |
| top | 获取栈顶元素 |
| push | 将元素插入到栈顶 |
| pop | 将栈顶元素移除 |
| swap | 交换两个栈中的值 |
2.2.1 empty()
empty 的功能主要是检查栈是否为空,是空返回 true,非空则返回 false
cpp
int main()
{
stack<int> s1;
if (s1.empty())
cout << "s1 is empty" << endl;
else
cout << "s1 is not empty" << endl;
stack<int> s2;
s2.push(1);
s2.push(2); //插入两个值到栈中
if (s2.empty())
cout << "s2 is empty" << endl;
else
cout << "s2 is not empty" << endl;
return 0;
}
最终的结果为:
cpp
s1 is empty
s2 is not empty
2.2.2 size()
size() 的主要功能是获取栈内元素的个数
cpp
int main()
{
stack<int> s1;
s1.push(1);
s1.push(2);
cout << s1.size() << endl;
return 0;
}
最终结果为:
cpp
2
2.2.3 top()
top 的作用主要是获取栈顶的元素
cpp
int main()
{
stack<int> s1;
s1.push(1);
s1.push(2);
cout << s1.top() << endl;
return 0;
}
最终结果为:
cpp
2
2.2.4 push()
push 的作用主要是将元素入栈并更新size,入栈后,该元素位于栈顶
cpp
int main()
{
stack<int> s1;
s1.push(1);
s1.push(2);
return 0;
}
2.2.5 pop()
pop 的作用主要是将栈顶元素出栈并更新 size
cpp
int main()
{
stack<int> s1;
s1.push(1);
s1.push(2);
s1.pop();
return 0;
}
2.2.6 swap()
swap 的作用主要是交换两个栈中的内容
cpp
int main()
{
stack<int> s1;
s1.push(1);
s1.push(2);
stack<int> s2;
s2.push(5);
s2.push(6);
s1.swap(s2);
return 0;
}
交换前:
交换后:







