问题标签 [deque]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3013 浏览

c++ - std::deque 内存使用 - Visual C++,以及与其他人的比较

跟进std::deque 的内存开销到底发生了什么?

Visual C++deque使用以下方法根据容器元素类型管理块:

这导致小元素的内存占用非常大。通过将第一行中的 16 更改为 128,我能够大大减少大型deque<char>. Process Explorer Private Bytes 在 1 亿次调用后从 181MB -> 113MB 下降push_back(const char& mychar))。

  • 任何人都可以证明其中的价值#define吗?
  • 其他编译器如何处理deque块大小?
  • push_back对于 100m调用 的简单测试,它们的占用空间(32 位操作)是deque<char>多少?
  • STL 是否允许在编译时覆盖此块大小而不修改 <deque>代码?
0 投票
3 回答
1988 浏览

python - 有人知道这个 Python 数据结构吗?

Python 类有六个要求,如下所示。只有粗体字才能被解读为要求。


  1. 以下四个操作中的许多操作的性能接近O(1) 。
  2. 在将对象插入容器时保持排序顺序。
  3. 能够查看对象中包含的最后一个值(最大值)。
  4. 允许两侧弹出(获取最小值或最大值)。
  5. 获取正在存储的对象的总大小或数量的能力。
  6. 作为一个现成的解决方案,就像 Python 标准库中的代码一样。

以下内容出于历史原因留在这里(帮助好奇并证明进行了研究)。


在查看了 Python 的标准库(特别是关于数据类型的部分)之后,我仍然没有找到一个满足分片表要求的类。collections.deque接近要求,但不支持保持其中包含的数据排序。它提供:

  1. 在具有O(1) 性能的双端队列的任一侧进行高效的追加和弹出。
  2. 对象中包含的数据的两侧弹出。
  3. 获取其中包含的对象的总大小或计数。

使用列表实现一个低效的解决方案将是微不足道的,但找到一个表现良好的类将是更可取的。在没有上限的不断增长的内存模拟中,这样的类可以保持空(已删除)单元格的索引并降低碎片级别。该bisect模块可能有助于:

  1. 帮助在数组中插入新对象时保持数组的排序。
  2. 在添加对象时保持列表排序的现成解决方案。
  3. 将允许执行array[-1]查看数组中的最后一个值。

未能完全满足要求并且看起来最没有希望的最终候选是该heapq模块。虽然支持看似有效的插入并确保这array[0]是最小值,但数组并不总是处于完全排序的状态。没有其他任何东西有帮助。


有谁知道 Python 中接近这六个要求的类或数据结构?

0 投票
3 回答
19940 浏览

c++ - 是否使用 std::deque 或 std::priority_queue 线程安全?

可能的重复:
C++ STL std::set 线程安全吗?
STL 队列的线程安全

我猜不是,我只是想确定一下。意味着 2 个线程同时使用or使用相同的std::deque 。std::deque::push_backpush_front

同样的问题适用std::priority_queue于功能std::priority_queue::pushstd::priority_queue::pop..

这些容器是线程安全的吗?或者我应该亲自将其编程为线程安全的?

Tnx 很多。

0 投票
2 回答
8804 浏览

iphone - 从 UITableView 出列可重用单元格

为什么这段代码可以正常工作:

据我了解单元格标识符,只有当我将cell.textLabel.text = ...行移出 if 语句时,此代码才能正常工作。换句话说,为什么标签有正确的文字???

0 投票
4 回答
2914 浏览

c++ - 调用擦除时 STL 迭代器失效的问题

STL 标准定义,当 std::deque、std::list 等容器上发生擦除时,迭代器将失效。

我的问题如下,假设包含在 std::deque 中的整数列表和一对指示 std::deque 中元素范围的索引,删除所有偶数元素的正确方法是什么?

到目前为止,我有以下内容,但是这里的问题是假定的结束在擦除后无效:

检查 std::remove_if 是如何实现的,似乎正在进行一个非常昂贵的复制/下移过程。

  • 有没有更有效的方法来实现上述目标而无需所有的复制/移位

  • 一般来说,删除/擦除元素比将其与序列中的下一个第 n 个值交换更昂贵(其中 n 是到目前为止已删除/删除的元素数)

注意:答案应该假设序列大小非常大,+1 百万个元素,并且平均有 1/3 的元素会被擦除。

0 投票
1 回答
1491 浏览

c++ - 初始化向量指针的双端队列

我的要求是将 500 个 MD 类型的对象存储在一个向量中,然后我将指向这些向量的指针保存在双端队列中。这里的问题是如何在复制构造函数 MDataContainer(const MDataContainer &mDataCont) 中初始化这个列表,并在重载赋值运算符 MDataContainer& operator=(const MDataContainer &mDataCont) 中分配它。为了摆脱代码重复,我使用了 Init 函数。请向我解释一种可以提供更好性能的方法。我已经在使用一些粗略的方法。我们可以有一些算法或其他库(我没有 gr8 的想法)可以用来解决这类问题。

0 投票
2 回答
351 浏览

c++ - 类似于大量项目的双端队列,但少量的内存使用量很小?

我有一大堆某种类型的对象,每个对象都可以分配一个双端队列来保存相同类型的其他对象。我使用双端队列是因为我需要在两端快速访问,并且因为任何特定对象都可能引用许多其他对象。

但是,很可能很多甚至大部分对象都引用了很少的其他对象。在这种情况下,deque 的内存使用量非常大。我正在使用的实现是在我执行第一个 push_back() 时一次分配 4096 个字节。双端队列中的每个元素只有 8 个字节。这是一大堆浪费的空间,特别是因为我正在制作许多这样的对象,因此也有许多这样的双端队列。

同时,我非常需要一个双端队列(或类似的东西),因为就像我说的,任何特定对象实际上都可以引用许多其他对象,尽管事实上大多数对象引用的其他对象很少。

我的第一个想法是使用 capacity() 和 reserve() 自己增长双端队列,但我的编译器告诉我,双端队列上没有这样的函数。

所以,我可能想写一个类,它有一个类似双端队列的接口,底层是一个向量和一个双端队列,使用向量直到(比如说)存在 16 个元素,之后向量被丢弃并使用双端队列从那里开始。

由于向量仅在只有少量元素时使用,所以 push_front() 和 pop_front() 在速度方面效率低下并不重要,因为我可以控制向量容量()和保留(),当存在更多元素时,双端队列使用大量内存并不重要。

但是,在像这样滚动我自己的课程之前,我想检查一下这样的东西是否已经存在。另外,如果有人知道我没有想到为什么这样的事情是个坏主意的任何原因,或者如果有人有任何相关的建议,我很想听听。

提前致谢。

0 投票
1 回答
126 浏览

c++ - 如果不使用,双端队列会减慢程序速度?

所以我有这个双端队列

并通过使用简单地添加元素

并使用擦除它们

如果我使用a[1001]它效果很好,如果我使用a[10001]它需要几秒钟,如果我使用a[100001]它需要大约 30 秒来执行程序。

问题是,在每种情况下,我都只 push_back 5 个 val,唯一的区别是双端队列的大小。

为什么?

我只需要从前面擦除元素,有没有更好的方法?:D

哦,还有,push_backed 元素使用多少字节?:D(在这种类型的双端队列中)

0 投票
1 回答
1439 浏览

jquery - 什么是队列名?

在这段代码中:

这是如何使用 dequeue() 函数吗?因为它在 jQuery 网站上说 dequeue( [ queueName ] )。因为我想使淡出()出队;fadeOut 是 queueName 吗?

这是使用 dequeue() 函数的方式吗?

谢谢你。

0 投票
7 回答
653 浏览

java - 双面排队问题

我正在尝试运行此方法以将通用值 (EltType) 插入到双面队列 (deque) 中,但我不断收到我无法弄清楚的 outOfBoundsException。有人能帮我解决这个问题吗?这只是代码的摘录,但我认为可以从中拼凑起来!

错误 :