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

Which data structure is best for basic stacks and queues in C++?

本文关键字:堆栈 队列 C++ 数据结构      更新时间:2023-10-16

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

从我用谷歌搜索的内容来看,我似乎可以使用std::vectorstd::stackstd::queue,或者std::deque,也许还有其他。

我不确定如何确定哪个最好使用。有什么建议吗?

编辑:我实现了对两者使用 std::vector,然后将std::stackstd::queue一起使用,对于一个小的测试用例,我看到了两者的完全相同的性能。编辑2: 使用更大的测试用例,看起来 std:stack/std:queue 优于std:vector .我猜这是因为 FIFO 队列一半对向量效率不高,但我需要对此进行更多测试。

>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::d eque 和 std::list 满足 这些要求。

如果情况允许,我会使用std::stackstd::queue而不关心潜在的细节。如果我必须采取更多的控制,我会选择std::deque

经验法则是,首先,确定所有需求,然后使用满足所有要求的最简单的数据结构。由于您没有搜索要求,因此最好是实现 C 样式链表。对于堆栈,您只需要一个指向前元素的指针,但对于队列,您必须维护 2 个指针来跟踪前元素以及最后一个元素。这可能是最快的实现。