我试图理解为什么Java的ArrayDeque优于Java的LinkedList,因为它们都实现了Deque接口.
我几乎没有看到有人在他们的代码中使用ArrayDeque.如果有人对ArrayDeque的实现方式有了更多了解,那将会很有帮助.
如果我明白了,我会更有信心使用它.我无法清楚地了解JDK实现它管理头尾引用的方式.
两者有什么区别?我的意思是方法都是一样的.因此,对于用户来说,他们的工作方式相同.
那是对的吗??
以来
为什么有人对子级宁愿std::vector到std::deque?
我最近开始研究如何在Python中实现各种数据结构,以使我的代码更高效.在调查列表和deques的工作原理时,我发现当我想要移位和卸载时,我可以获得好处,从列表中的O(n)减少到deques中的O(1)的时间(列表被实现为具有固定长度的数组,具有每次在前面插入某些东西时都要完全复制......).我似乎无法找到的是deque如何实现的具体细节,以及它的缺点与列表的细节.有人可以在这两个问题上启发我吗?
可能重复:
为什么我更喜欢使用vector来deque
我很好奇为什么它std::vector比这更受欢迎std::deque.Deque几乎和查找一样有效,插入更有效(没有vector :: reserve),允许在前面插入/删除.
Herb Sutter曾经建议如果你想使用矢量,那就更喜欢deque(我在解读).然而,在最近关于编写Modern C++的演讲中,他再次强烈建议将其std::vector视为默认容器.根据我之前链接的GOTW,即使标准也有类似的措辞.
有这种差异的原因吗?它vector是否更简单,更为人所知,还是有技术原因?或者它vector只是一个更酷的名字..?
有没有一种有效的方法来添加一个对象来开始NSMutableArray?我正在寻找一个好的双端队列objective C.
任何人都可以给我一个需要Deque数据结构的情况的例子吗?
注意 -请不要解释它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......
在经历了许多痛苦和痛苦之后,我已经找到了一些非常奇怪的行为,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) deque ×10
c++ ×5
stl ×3
python ×2
vector ×2
arraydeque ×1
c++11 ×1
gcc ×1
ios ×1
iphone ×1
java ×1
linked-list ×1
list ×1
objective-c ×1
slice ×1