1、很多人可能误认为stack是继承linkedlist的,实际上则不是这样的,stack其实继承于vector类,这就意味着stack在本质上并不是一个链表,而是一个实打实的数组。
2、stack本质虽然是一个数组,但是堆栈的本质并没有些许改变。还是先进后出的实现方式。继承关系也在vector后并没有继承其他的类,但是由于继承了vector,因此是线程安全的。
3、stack在原马上是很简单的,比起vector多的就是push、peek以及pop,push和pop自然不必多说,peek的功能是取出最顶层的一个元素,但是不删除。
4、另外的,由于继承了vector类的所有方法,所以stack堆栈其实是支持直接添加删除和随机访问的。这一点真的和我们对于堆栈本身的理解差距是很大的。虽然口头上说这是个堆栈,实际上在代码中可以任意的对任意节点进行操作,所以实质上是实现了很多不需要的功能这样子的。
5、因为这一个缺点,导致了现在大多堆栈的实现基于linkedlist的变种而不是直接使用stack。不过说归说,下面让我们来看一下stack使用的实例把。
6、这大概就是stack的基本内容了,stack本身的存在是为了解决堆栈问题,但是我个人觉得为了图省事继承vector本身就是个失误,stack提供的add、set、get等方法本质上完全不遵守堆栈的方案,这也导致了stack现在不被使用的尴尬的必然结局。