标签: deque

什么是STL的双端队列?

我正在查看STL容器并试图弄清楚它们到底是什么(即使用的数据结构),并且deque阻止了我:我起初认为它是一个双链表,它允许从两端插入和删除恒定时间,但我对运营商[]在恒定时间内做出的承诺感到不安.在链表中,任意访问应该是O(n),对吗?

如果它是一个动态数组,它如何在恒定时间内添加元素?应该提到的是,可能会发生重新分配,并且O(1)是一个摊销成本,就像向量一样.

所以我想知道这个结构允许在恒定时间内任意访问,同时永远不需要移动到一个新的更大的地方.

c++ stl deque

173
推荐指数
7
解决办法
6万
查看次数

为什么ArrayDeque比LinkedList更好

我试图理解为什么Java的ArrayDeque优于Java的LinkedList,因为它们都实现了Deque接口.

我几乎没有看到有人在他们的代码中使用ArrayDeque.如果有人对ArrayDeque的实现方式有了更多了解,那将会很有帮助.

如果我明白了,我会更有信心使用它.我无法清楚地了解JDK实现它管理头尾引用的方式.

java linked-list deque arraydeque

141
推荐指数
5
解决办法
6万
查看次数

deque和list STL容器有什么区别?

两者有什么区别?我的意思是方法都是一样的.因此,对于用户来说,他们的工作方式相同.

那是对的吗??

c++ stl list deque

78
推荐指数
6
解决办法
6万
查看次数

为什么我更喜欢使用vector来deque

以来

  1. 它们都是连续的记忆容器;
  2. 特征明智,deque几乎所有的矢量都有,但更多,因为它在前面插入更有效.

为什么有人对子级宁愿std::vectorstd::deque

c++ stl vector deque

77
推荐指数
4
解决办法
4万
查看次数

如何实现Python中的deques,以及它们何时比列表更糟糕?

我最近开始研究如何在Python中实现各种数据结构,以使我的代码更高效.在调查列表和deques的工作原理时,我发现当我想要移位和卸载时,我可以获得好处,从列表中的O(n)减少到deques中的O(1)的时间(列表被实现为具有固定长度的数组,具有每次在前面插入某些东西时都要完全复制......).我似乎无法找到的是deque如何实现的具体细节,以及它的缺点与列表的细节.有人可以在这两个问题上启发我吗?

python deque

63
推荐指数
4
解决办法
3万
查看次数

为什么std :: vector比std :: deque更受欢迎?

可能重复:
为什么我更喜欢使用vector来deque

我很好奇为什么它std::vector比这更受欢迎std::deque.Deque几乎和查找一样有效,插入更有效(没有vector :: reserve),允许在前面插入/删除.

Herb Sutter曾经建议如果你想使用矢量,那就更喜欢deque(我在解读).然而,在最近关于编写Modern C++的演讲中,他再次强烈建议将其std::vector视为默认容器.根据我之前链接的GOTW,即使标准也有类似的措辞.

有这种差异的原因吗?它vector是否更简单,更为人所知,还是有技术原因?或者它vector只是一个更酷的名字..?

c++ vector deque

51
推荐指数
5
解决办法
6033
查看次数

将对象添加到NSMutableArray的开头?

有没有一种有效的方法来添加一个对象来开始NSMutableArray?我正在寻找一个好的双端队列objective C.

iphone objective-c deque nsmutablearray ios

45
推荐指数
2
解决办法
3万
查看次数

为什么我们在现实世界中需要Deque数据结构?

任何人都可以给我一个需要Deque数据结构的情况的例子吗?

注意 -请不要解释它deque是什么?

deque data-structures

44
推荐指数
4
解决办法
3万
查看次数

对collections.deque使用切片表示法

如何从以下方面有效,优雅和蟒蛇地提取物品3..6 deque而不改变它:

from collections import deque
q = deque('',maxlen=10)
for i in range(10,20):
    q.append(i)
Run Code Online (Sandbox Code Playgroud)

片符号似乎并没有一起工作deque......

python deque slice

42
推荐指数
5
解决办法
1万
查看次数

为什么GCC -O3与std :: deque上的过滤器迭代器导致无限的std :: distance?

在经历了许多痛苦和痛苦之后,我已经找到了一些非常奇怪的行为,std::distance当给出一系列boost::filter_iterators超过a 时,它永远不会返回std::deque.看来问题是GCC(6.1+)的-O3优化问题.这是一个演示违规行为的示例:

#include <string>
#include <deque>
#include <iterator>
#include <iostream>

#include <boost/iterator/filter_iterator.hpp>

struct Foo
{
    std::string bar, s = "";
    char a = '\0';
};

int main()
{
    const std::deque<Foo> foos(14, {""});
    const std::string test {};
    const auto p = [test] (const auto& foo) { return foo.bar == test; };
    using boost::make_filter_iterator;
    const auto begin = make_filter_iterator(p, std::cbegin(foos), std::cend(foos));
    const auto end   = make_filter_iterator(p, std::cend(foos), std::cend(foos));
    std::cout << std::distance(begin, end) << std::endl; …
Run Code Online (Sandbox Code Playgroud)

c++ gcc deque filter-iterator c++11

37
推荐指数
1
解决办法
628
查看次数