std::vector与std::stack的区别

28

std::vectorstd::stack 有什么区别?

显然,向量可以在集合内删除项目(虽然比列表慢得多),而堆栈是一个仅支持 LIFO 操作的集合。

但是,对于末尾项操作,堆栈是否更快?它是链表还是动态重新分配的数组?

我在网上找不到太多关于堆栈的信息,但如果我正确地理解它们(它们类似于实际线程堆栈;push、pop 等,以及那个top() 方法),那么它们似乎非常适合窗口层叠管理。


2
前者是一个容器,后者是一个容器适配器。 - ildjarn
1
理论上是的,实际上不是。在几乎所有情况下,vector 的性能优于 list,尽管速度较慢。 - James McNellis
@JamesMcNellis 对于在大型向量数据集中删除记录,这比双向链表慢得多,不是吗? - Qix - MONICA WAS MISTREATED
可能是什么是向量和堆栈之间的主要区别?的重复问题。 - underscore_d
1个回答

58

stack 不是一个容器,而是一个容器适配器。它有一个 vectordeque 或类似的容器作为成员变量来实际存储元素。请记住:它的声明方式如下:

template<
    class T,
    class Container = std::deque<T>
> class stack;

stack 的作用仅是将用户界面限制在该内部容器中,操作的性能特征完全取决于底层容器的性能特征。


我认为我理解了“容器适配器”这个术语的含义,但仍然想知道是否有具体的定义。是否有可以称之为“容器适配器”的列表? - KcFnMi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接