【发布时间】:2016-08-16 13:30:20
【问题描述】:
我正在用 C++ 做一些新手 HackerRank 问题,我发现似乎有几种方法可以解决这个问题,我想知道哪种方法使用最广泛和/或最有效。该问题需要为它们创建一个包含stack 和queue 变量以及stack_push/stack_pop 和queue_push/queue_pop 函数的类。
从我的谷歌搜索来看,我似乎可以使用std::vector、std::stack 和std::queue,或者std::deque,也许还有其他。
我不确定如何确定哪个最适合使用。有什么建议吗?
编辑:
我对两者都使用了std::vector,然后使用std::stack 和std::queue 实现了,对于小型测试用例,我看到两者的性能完全相同。
编辑2:
对于更大的测试用例,它看起来像 std:stack/std:queue 优于 std:vector。我猜这是因为 FIFO 队列的一半对向量效率不高,但我需要对此进行更多测试。
【问题讨论】:
-
始终使用
std::vector。 -
std::stack和std::queue本身不是容器,它们通常采用底层容器std::vector。 -
@Jake:嗯,只要你要问,这简直是最简单也是最好的选择。一旦你知道如何欣赏另一种数据结构更好,你就不必再问了。
-
@KerrekSB:
std::vector适合堆栈。对于队列来说非常糟糕,除非您将其用作循环队列并管理前后索引。 -
不,@LokiAstari 说你不应该构建它,而只是使用已经可用的。但是,LIFO 是一个队列,而不是堆栈。如果你正在构建堆栈,你应该使用
std::stack。
标签: c++ class stack queue deque