问题标签 [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.
c++ - std::deque 内存使用 - Visual C++,以及与其他人的比较
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>
代码?
python - 有人知道这个 Python 数据结构吗?
Python 类有六个要求,如下所示。只有粗体字才能被解读为要求。
- 以下四个操作中的许多操作的性能接近O(1) 。
- 在将对象插入容器时保持排序顺序。
- 能够查看对象中包含的最后一个值(最大值)。
- 允许两侧弹出(获取最小值或最大值)。
- 获取正在存储的对象的总大小或数量的能力。
- 作为一个现成的解决方案,就像 Python 标准库中的代码一样。
以下内容出于历史原因留在这里(帮助好奇并证明进行了研究)。
在查看了 Python 的标准库(特别是关于数据类型的部分)之后,我仍然没有找到一个满足分片表要求的类。collections.deque
接近要求,但不支持保持其中包含的数据排序。它提供:
- 在具有O(1) 性能的双端队列的任一侧进行高效的追加和弹出。
- 对象中包含的数据的两侧弹出。
- 获取其中包含的对象的总大小或计数。
使用列表实现一个低效的解决方案将是微不足道的,但找到一个表现良好的类将是更可取的。在没有上限的不断增长的内存模拟中,这样的类可以保持空(已删除)单元格的索引并降低碎片级别。该bisect
模块可能有助于:
- 帮助在数组中插入新对象时保持数组的排序。
- 在添加对象时保持列表排序的现成解决方案。
- 将允许执行
array[-1]
以查看数组中的最后一个值。
未能完全满足要求并且看起来最没有希望的最终候选是该heapq
模块。虽然支持看似有效的插入并确保这array[0]
是最小值,但数组并不总是处于完全排序的状态。没有其他任何东西有帮助。
有谁知道 Python 中接近这六个要求的类或数据结构?
c++ - 是否使用 std::deque 或 std::priority_queue 线程安全?
我猜不是,我只是想确定一下。意味着 2 个线程同时使用or使用相同的std::deque 。std::deque::push_back
push_front
同样的问题适用std::priority_queue
于功能std::priority_queue::push
和std::priority_queue::pop
..
这些容器是线程安全的吗?或者我应该亲自将其编程为线程安全的?
Tnx 很多。
iphone - 从 UITableView 出列可重用单元格
为什么这段代码可以正常工作:
据我了解单元格标识符,只有当我将cell.textLabel.text = ...
行移出 if 语句时,此代码才能正常工作。换句话说,为什么标签有正确的文字???
c++ - 调用擦除时 STL 迭代器失效的问题
STL 标准定义,当 std::deque、std::list 等容器上发生擦除时,迭代器将失效。
我的问题如下,假设包含在 std::deque 中的整数列表和一对指示 std::deque 中元素范围的索引,删除所有偶数元素的正确方法是什么?
到目前为止,我有以下内容,但是这里的问题是假定的结束在擦除后无效:
检查 std::remove_if 是如何实现的,似乎正在进行一个非常昂贵的复制/下移过程。
有没有更有效的方法来实现上述目标而无需所有的复制/移位
一般来说,删除/擦除元素比将其与序列中的下一个第 n 个值交换更昂贵(其中 n 是到目前为止已删除/删除的元素数)
注意:答案应该假设序列大小非常大,+1 百万个元素,并且平均有 1/3 的元素会被擦除。
c++ - 初始化向量指针的双端队列
我的要求是将 500 个 MD 类型的对象存储在一个向量中,然后我将指向这些向量的指针保存在双端队列中。这里的问题是如何在复制构造函数 MDataContainer(const MDataContainer &mDataCont) 中初始化这个列表,并在重载赋值运算符 MDataContainer& operator=(const MDataContainer &mDataCont) 中分配它。为了摆脱代码重复,我使用了 Init 函数。请向我解释一种可以提供更好性能的方法。我已经在使用一些粗略的方法。我们可以有一些算法或其他库(我没有 gr8 的想法)可以用来解决这类问题。
c++ - 类似于大量项目的双端队列,但少量的内存使用量很小?
我有一大堆某种类型的对象,每个对象都可以分配一个双端队列来保存相同类型的其他对象。我使用双端队列是因为我需要在两端快速访问,并且因为任何特定对象都可能引用许多其他对象。
但是,很可能很多甚至大部分对象都引用了很少的其他对象。在这种情况下,deque 的内存使用量非常大。我正在使用的实现是在我执行第一个 push_back() 时一次分配 4096 个字节。双端队列中的每个元素只有 8 个字节。这是一大堆浪费的空间,特别是因为我正在制作许多这样的对象,因此也有许多这样的双端队列。
同时,我非常需要一个双端队列(或类似的东西),因为就像我说的,任何特定对象实际上都可以引用许多其他对象,尽管事实上大多数对象引用的其他对象很少。
我的第一个想法是使用 capacity() 和 reserve() 自己增长双端队列,但我的编译器告诉我,双端队列上没有这样的函数。
所以,我可能想写一个类,它有一个类似双端队列的接口,底层是一个向量和一个双端队列,使用向量直到(比如说)存在 16 个元素,之后向量被丢弃并使用双端队列从那里开始。
由于向量仅在只有少量元素时使用,所以 push_front() 和 pop_front() 在速度方面效率低下并不重要,因为我可以控制向量容量()和保留(),当存在更多元素时,双端队列使用大量内存并不重要。
但是,在像这样滚动我自己的课程之前,我想检查一下这样的东西是否已经存在。另外,如果有人知道我没有想到为什么这样的事情是个坏主意的任何原因,或者如果有人有任何相关的建议,我很想听听。
提前致谢。
c++ - 如果不使用,双端队列会减慢程序速度?
所以我有这个双端队列
并通过使用简单地添加元素
并使用擦除它们
如果我使用a[1001]
它效果很好,如果我使用a[10001]
它需要几秒钟,如果我使用a[100001]
它需要大约 30 秒来执行程序。
问题是,在每种情况下,我都只 push_back 5 个 val,唯一的区别是双端队列的大小。
为什么?
我只需要从前面擦除元素,有没有更好的方法?:D
哦,还有,push_backed 元素使用多少字节?:D(在这种类型的双端队列中)
jquery - 什么是队列名?
在这段代码中:
这是如何使用 dequeue() 函数吗?因为它在 jQuery 网站上说 dequeue( [ queueName ] )。因为我想使淡出()出队;fadeOut 是 queueName 吗?
这是使用 dequeue() 函数的方式吗?
谢谢你。
java - 双面排队问题
我正在尝试运行此方法以将通用值 (EltType) 插入到双面队列 (deque) 中,但我不断收到我无法弄清楚的 outOfBoundsException。有人能帮我解决这个问题吗?这只是代码的摘录,但我认为可以从中拼凑起来!
错误 :