一、定义
stack是一个STL(标准模板库),调用#include< stack>即可使用栈类。
二、构造函数
stack<Type, Container> (<数据类型,容器类型>) stackName;
初始化时必须要有数据类型,容器可省略,省略时则默认为deque 类型
//stack是基于deque实现的,相当于deque双端队列,封闭了一端
/*创建堆栈时,不能在初始化列表中用对象来初始化,但是可以用另一个容器来初始化,
只要堆栈的底层容器类型和这个容器的类型相同*/
//stack<int> s1 = {1,2,3,4}; error
//stack<int> s1(10); error
//1、创建一个空的栈s1
stack<int> s1;
stack<int,list<int>> s1;
//2、用vector容器初始化stack
vector<int> v1={1,2,3,4};
stack<int,vector<int>> s2(v1); //1,2,3,4依次入栈
//3、用deque容器初始化stack
//用deque为stack初始化时deque可省 因为stack是基于deque实现的, 默认以deque方式构造
deque<int> d1 = {1,2,3,4,5};
stack<int,deque<int>> s3(d1);
stack<int> s4(d1);
//4、用list容器初始化stack
list<int> l1 = {1,2,3,4,5};
stack<int,list<int>> s5(l1);
三、常用函数
以下将stack<Type, Container> stackName中的数据类型Type简写为T
top():返回一个栈顶元素的引用,类型为 T&。如果栈为空,返回值未定义。
push(const T& obj):可以将对象副本压入栈顶。这是通过调用底层容器的 push_back() 函数完成的。
push(T&& obj):以移动对象的方式将对象压入栈顶。这是通过调用底层容器的有右值引用参数的 push_back() 函数完成的。
pop():弹出栈顶元素。
size():返回栈中元素的个数。
empty():在栈中没有元素的情况下返回 true。
emplace():用传入的参数调用构造函数,在栈顶生成对象。
swap(stack<T> & other_stack):将当前栈中的元素和参数中的元素交换。参数所包含元素的类型必须和当前栈的相同。对于 stack 对象有一个特例化的全局函数 swap() 可以使用。