栈。专门设计用于在后进先出(LIFO)环境中操作,其中元素仅从容器的一端插入和提取。
栈是一种容器适配器(容器适配器是使用特定容器类的封装对象作为其底层容器的类,提供一组特定的成员函数来访问其元素)。
栈中的元素从特定容器的“后面”弹出(推出),也即栈顶。
底层容器类可以是标准容器类中的任何一个或者其他专门设计的容器类。这些容器应该支持以下操作:
- empty 判空
- size 元素个数
- back 尾元素
- push_back 末端插入
- pop_back 末端弹出
标准容器类vector、deque和list满足这些要求。默认情况下,如果没有为特定栈实例指定容器类,则使用标准容器deque。
// 头文件
#include <stack>
// 初始化
stack<int> seq;
// emplace,就地将参数构建成对象,并入栈。如:
struct A{
int a;
int b;
};
stack<A> s;
s.emplace(1,2);
// 相当于
A a(1,2);
s.push(a);
// 比push在此时更省内存
// 判空: bool empty() const;
seq.empty()
// 出栈:void pop();
seq.pop(); // 无返回值,使用时要先判空
// 入栈:
// void push(value_type& val);
// void push(const value_type& val);
seq.push(2);
// 栈中元素个数: size_type size() const;
int n = seq.size();
// 取栈顶元素:
// reference top();
// const reference top() const;
int t = seq.top(); // 使用前要判空
// 交换两个栈中的元素: swap
// void swap(stack& x) noexcept();
stack<int> seq2;
seq.swap(seq2);