栈的内容不多,使用也相对简单,只需要遵守一个原则,就是先进后出。最后加入栈的元素将最先被取出来,在栈的同一端进行数据的插入与取出,这一段叫做“栈顶”。使用STL的stack需要include一个头文件<stack>
容器适配器:
首先我们要明白stack其实是一种容器适配器,它和容器是不一样的。像vector,deque这种称为容器,而容器适配器只是提供了相关接口,内部使用的还是别的容器。比如stack内部默认使用的为deque,也可以设置为使用vector等。相当于对这些容器接口进行了封装,封闭了一些不需要的接口,只留下我们需要的接口。
就像我之前的一个疑问:既然stack能做的,vector都能做,那为什么不直接使用vector呢?其实要用vector,deque代替stack完全可以,但是我们使用stack的目的就是为了告诉你,这是一个栈。对接口的封装也是为了防止栈操作以外的误操作,也就是防止熊孩子不按规矩使用。因此,stack容器没有迭代器,且不能通过下标访问元素。
构造:
template <class T, class Container = deque<T> > class stack;
如上,这对尖括号中有两个参数,第一个是T,表示栈中存放的数据的类型,比如int,double,或者结构体之类。
第二个参数指明底层实现的容器类型,也就是指明这个栈的内部实现方式,比如vector,deque,list。如果不指明它,默认使用deque(双端队列)。当然一般情况下不需要指定这一项