Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于C++;? 我在C++中做了一些新的HackerRank问题,我发现似乎有几种方法来解决这个问题,我想知道哪种方式是最广泛使用和/或最有效的。该问题需要创建一个类,该类既包含stack和queue变量,也包含stack\u push/stack\u pop和queue\u push函数_C++_Class_Stack_Queue_Deque - Fatal编程技术网

对于C++;? 我在C++中做了一些新的HackerRank问题,我发现似乎有几种方法来解决这个问题,我想知道哪种方式是最广泛使用和/或最有效的。该问题需要创建一个类,该类既包含stack和queue变量,也包含stack\u push/stack\u pop和queue\u push函数

对于C++;? 我在C++中做了一些新的HackerRank问题,我发现似乎有几种方法来解决这个问题,我想知道哪种方式是最广泛使用和/或最有效的。该问题需要创建一个类,该类既包含stack和queue变量,也包含stack\u push/stack\u pop和queue\u push函数,c++,class,stack,queue,deque,C++,Class,Stack,Queue,Deque,从我在谷歌上搜索的内容来看,我似乎可以使用std::vector,std::stack和std::queue,或者std::deque,或者其他 我不知道如何确定哪一个最好用。有什么建议吗 编辑: 我对两者都使用std::vector,然后使用std::stack以及std::queue实现,在一个小的ish测试用例中,我看到了两者的精确性能。 编辑2: 对于一个大得多的测试用例,它看起来像std:stack/std:queue比std:vector性能更好。我猜这是因为FIFO队列的一半在向量

从我在谷歌上搜索的内容来看,我似乎可以使用
std::vector
std::stack
std::queue
,或者
std::deque
,或者其他

我不知道如何确定哪一个最好用。有什么建议吗

编辑: 我对两者都使用
std::vector
,然后使用
std::stack
以及
std::queue
实现,在一个小的ish测试用例中,我看到了两者的精确性能。 编辑2:
对于一个大得多的测试用例,它看起来像
std:stack
/
std:queue
std:vector
性能更好。我猜这是因为FIFO队列的一半在向量上没有效率,但我需要进一步测试。

std::stack
使用
std::deque
作为底层容器。
std::queue
也是如此。看到和

从引用的页面

template<
    class T,
    class Container = std::deque<T>
> class stack;
模板<
T类,
类容器=std::deque
>类堆栈;
Container—用于存储数据的基础容器的类型 元素。容器必须满足以下要求: 序列容器。此外,它必须提供以下内容 具有常用语义的函数:back()push_back()pop_back() 标准容器std::vector、std::deque和std::list满足 这些要求


如果情况允许,我将使用
std::stack
std::queue
,而不必考虑底层细节。如果我必须采取更多的控制,我会选择
std::deque
std::stack
使用
std::deque
作为底层容器。
std::queue
也是如此。看到和

从引用的页面

template<
    class T,
    class Container = std::deque<T>
> class stack;
模板<
T类,
类容器=std::deque
>类堆栈;
Container—用于存储数据的基础容器的类型 元素。容器必须满足以下要求: 序列容器。此外,它必须提供以下内容 具有常用语义的函数:back()push_back()pop_back() 标准容器std::vector、std::deque和std::list满足 这些要求


如果情况允许,我将使用
std::stack
std::queue
,而不必考虑底层细节。如果我需要更多的控制,我会选择
std::deque

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

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

始终使用
std::vector
std::stack
std::queue
本身并不是容器,它们通常使用底层容器
std::vector
@Jake:好吧,只要你不得不问,这是最简单和最好的选择。一旦你知道如何理解另一种数据结构更好,你就不必再问了。@KerrekSB:
std::vector
对于堆栈来说很好。对于一个队列来说非常糟糕,除非你打算将它用作循环队列并管理前后索引。不,@LokiAstari说你不应该构建它,而应该使用已经可用的。然而,后进先出是一个队列,而不是堆栈。如果您正在构建堆栈,您应该使用
std::stack
。始终使用
std::vector
std::stack
std::queue
本身并不是容器,它们通常使用底层容器
std::vector
@Jake:好吧,只要您需要询问,这是最简单和最好的选择。一旦你知道如何理解另一种数据结构更好,你就不必再问了。@KerrekSB:
std::vector
对于堆栈来说很好。对于一个队列来说非常糟糕,除非你打算将它用作循环队列并管理前后索引。不,@LokiAstari说你不应该构建它,而应该使用已经可用的。然而,后进先出是一个队列,而不是堆栈。如果您正在构建堆栈,则应使用
std::stack