代码之家  ›  专栏  ›  技术社区  ›  Austin

哪种数据结构最适合C++中的基本堆栈和队列?

  •  1
  • Austin  · 技术社区  · 9 年前

    我正在用C++做一些新手HackerRank问题,我发现似乎有几种方法可以解决这个问题,我想知道哪种方法使用最广泛和/或最有效。这个问题需要创建一个包含这两者的类 stack queue 变量以及 stack_push / stack_pop queue_push / queue_pop 功能。

    根据我在谷歌上的搜索结果,我可以使用 std::vector , std::stack std::queue std::deque ,也许还有其他人。

    我不知道如何确定哪一种是最好的。有什么建议吗?

    编辑: 我使用 标准::矢量 用于两者,然后使用 标准::堆栈 随着 std::队列 在一个小的测试用例中,我看到了两者的性能完全相同。 编辑2: 对于更大的测试用例,它看起来像 std:stack / std:queue 跑赢大市 std:vector .我猜这是因为FIFO队列的一半对向量无效,但我需要对其进行更多测试。

    2 回复  |  直到 9 年前
        1
  •  3
  •   Arun    9 年前

    std::stack 使用 std::deque 作为底层容器。也是如此 std::queue 看见 http://en.cppreference.com/w/cpp/container/stack http://en.cppreference.com/w/cpp/container/queue

    从引用的页面

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

    容器—用于存储 元素。容器必须满足 序列容器。此外,还必须提供以下内容 具有通常语义的函数:back()push_back(pop_back) 标准容器std::vector、std:、deque和std:;list满足 这些要求。

    如果情况允许,我会使用 标准::堆栈 std::队列 而不必担心潜在的细节。如果我必须掌握更多的控制权,我会选择 标准::deque .

        2
  •  1
  •   Manish    9 年前

    经验法则是,首先确定所有需求,然后使用满足所有需求的最简单数据结构。由于你没有搜索要求,最好是实现一个C风格的链接列表。对于Stack,您只需要一个指向前端元素的指针,但是对于Queue,您必须维护2个指针来跟踪前端元素和最后一个元素。这可能是最快的实现。