【问题标题】:Is std::stack implemented using a double linked list?std::stack 是使用双链表实现的吗?
【发布时间】:2016-02-16 21:43:05
【问题描述】:

曾经有一位教授告诉我,std::stack 通常是使用双链表实现的,如果您只需要访问顶部,这将是多余的。

他的结论是,使用std::vector 或单个链表实现的用户定义堆栈结构将节省内存空间。

不管怎样,我很可能还是用STL版本(不浪费精力),但是std::stack真的那么浪费内存吗?

【问题讨论】:

  • 我不知道答案,但我想至少它取决于编译器。
  • 大多数 CPP 编译器(肯定是你的)不是开源的吗?
  • 很好的问题,但是您可以尝试自己编译,或使用调试器,或查看规范,或查看源代码等。
  • 你确定你没听错,他居然说的是双端队列,即deque?看看declaration of std::stack,它的用途应该很明显了。您打算在使用它之前检查文档,对吗?
  • @Aposhian,您是否点击了我提供的链接?它没有清楚地回答你的问题吗? "充当底层容器的包装器 [...] 用于存储元素的底层容器的类型。[...] 标准容器 std::vector、std::deque 和 std: :list 满足这些要求。” 如果您阅读该页面,您会看到 std::stack 的底层容器(即 std::stack 实际存储数据的实现方式)是模板参数,所以不固定。当然,这就是您需要的所有洞察力。

标签: c++ stl linked-list stack doubly-linked-list


【解决方案1】:

std::stack 是一个容器适配器。该实现使用另一种容器类型(定义为模板参数)进行存储。

默认情况下,它使用std::deque,虽然它可以使用std::list,但它并不完全是一个双链表。

使用std::vector 支持可以节省少量内存,但可能会降低性能。

【讨论】:

    猜你喜欢
    • 2019-06-01
    • 1970-01-01
    • 2014-04-07
    • 2013-03-01
    • 2016-06-10
    • 2018-03-14
    • 2021-11-18
    • 2011-06-03
    相关资源
    最近更新 更多