std::vector 与 std::stack

Posted

技术标签:

【中文标题】std::vector 与 std::stack【英文标题】:std::vector vs std::stack 【发布时间】:2012-09-11 06:38:12 【问题描述】:

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

很明显,向量可以删除集合中的项目(尽管比列表慢得多),而堆栈被构建为仅限 LIFO 的集合。

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

我找不到关于堆栈的太多信息,但如果我正确地描绘了它们(它们类似于实际的线程堆栈;推送、弹出等 - 以及 top() 方法),那么它们看起来很完美用于窗口堆叠管理。

【问题讨论】:

前者是容器,后者是容器适配器 "虽然比 list 慢得多" 从理论上讲,是的。实际上,没有。对于几乎所有用例,vector 的性能都将优于 list @JamesMcNellis 用于删除大型矢量数据集中间的记录?这不是比双重列出的列表慢得多吗? What is the major difference between a vector and a stack?的可能重复 【参考方案1】:

stack 不是容器;它是一个容器适配器。它有一个vectordeque 或类似的容器,它存储为实际保存元素的成员。记住:它被声明为:

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

stack 所做的只是将用户界面限制为这个内部容器。操作的性能特征与底层容器的性能特征完全相同。

【讨论】:

以上是关于std::vector 与 std::stack的主要内容,如果未能解决你的问题,请参考以下文章

如何将两个 std::vector 与 std::pair 组合成一个 std::vector

std::vector 与 std::list 与 std::slist 的相对性能?

std::vector::insert 与 std::list::operator[]

std::vector 与 std::stack

c++ 数组与 std::vector 和 std::array 的效率

boost::ptr_vector 与 std::vector<std::unique_ptr<T>>? [关闭]