哪种数据结构最适合C++中的基本堆栈和队列
Which data structure is best for basic stacks and queues in C++?
我正在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::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::stack
或std::queue
而不关心潜在的细节。如果我必须采取更多的控制,我会选择std::deque
。
经验法则是,首先,确定所有需求,然后使用满足所有要求的最简单的数据结构。由于您没有搜索要求,因此最好是实现 C 样式链表。对于堆栈,您只需要一个指向前元素的指针,但对于队列,您必须维护 2 个指针来跟踪前元素以及最后一个元素。这可能是最快的实现。
- 堆栈和队列是否像C++中的数组一样传递?
- 了解使用堆栈实现队列的递归调用机制
- 为什么某些 STL 容器(堆栈、队列、优先级队列)不支持迭代器?
- 嵌套容器:为什么我无法访问堆栈队列顶部的堆栈?C++
- 堆栈和队列的C++默认实现
- 前缀表示法 C++,分段错误(堆栈和队列)
- 将元素从队列复制到堆栈
- 具有父类和虚拟函数的堆栈和队列
- 在C++中使用队列和堆栈对 2 个向量进行加减
- 在堆或堆栈上分配的 std::队列的内存
- 使用提升库在队列和堆栈数据结构上保存和加载数据时出错
- 尝试使用堆栈创建队列.为什么我会遇到int转换错误的空白
- 堆栈,队列延迟
- 将双重链接列表与C 中的堆栈和队列类链接
- 堆栈和队列在 Dev-C++ 中给出错误
- 根据堆栈类实现队列类的复制构造函数
- 过度填充堆栈和队列容量(C )
- 堆栈/队列 C++ 中的内存泄漏
- 使用C++堆栈/队列分析XML文件
- 什么是堆栈?arrayStack ?arrayQueue ?堆栈队列 ?它们在C++上有何不同