标签: deque

Java相当于std :: deque

我是一个来自C++/STL的相对较新的Java程序员,我正在寻找具有这些特性的类(C++ std :: deque具有,据我所知):

  1. O(1)在开始/结束时插入/移除的性能
  2. O(1)按索引查找的性能
  3. 是可增长的集合(不需要固定大小的边界)

是否有Java等同于此?我找到了Java 1.6 [ArrayDeque]类,它具有插入/删除和可增长的特性,但似乎没有按索引查找,除非你调用toArray(),它不是O(1).

java collections deque

11
推荐指数
1
解决办法
2103
查看次数

如何定义Double Brackets/Double Iterator Operator,类似于Vector of Vectors'?

我正在移植使用大量浮点数的代码,这可能会触发从c到c ++的malloc失败.我问了一个关于我是否应该使用矢量或deques的问题,Niki Yoshiuchi慷慨地给了我一个安全包装类型的例子:

template<typename T>
class VectorDeque
{
private:
  enum TYPE { NONE, DEQUE, VECTOR };
  std::deque<T> m_d;
  std::vector<T> m_v;
  TYPE m_type;
  ...
public:
  void resize(size_t n)
  {
    switch(m_type)
    {
      case NONE:
      try
      {
        m_v.resize(n);
        m_type = VECTOR;
      }
      catch(std::bad_alloc &ba)
      {
        m_d.resize(n);
        m_type = DEQUE;
      }
      break;
    }
  }
};
Run Code Online (Sandbox Code Playgroud)

我需要一个2D矢量/ deque deques的矢量,所以我将其修改为以下代码:

template<typename T>
class VectorDeque
{
private:
  enum STORAGE_CONTAINER { NONE, DEQUE, VECTOR };
  std::deque<std::deque<T> > x_d,y_d,z_d;
  std::vector<std::vector<T> > x_v,y_v,z_v;
  TYPE my_container;
public:
  void resize(size_t …
Run Code Online (Sandbox Code Playgroud)

c++ iterator vector operator-overloading deque

11
推荐指数
1
解决办法
8672
查看次数

是使用std :: deque还是std :: priority_queue线程安全?

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

我猜它不是,我只想确定.意思是2个线程使用相同的 std :: deque std::deque::push_backpush_front同时使用.

同样的问题std::priority_queue和功能std::priority_queue::pushstd::priority_queue::pop..

这些容器是否是线程安全的?或者我应该亲自编程它是线程安全的?

Tnx很多.

c++ stl priority-queue thread-safety deque

11
推荐指数
1
解决办法
2万
查看次数

这个deque是否在python中是线程安全的?

我无法确定以下双端队列是否是线程安全的.
简而言之,我创建了一个带有双端队列的类,它在新线程中每1秒显示一次其内容(因此在打印时不会暂停主程序).
deque是从主线程填充的,所以基本上应该有碰撞的机会.
但是,使用类方法填充deque,因此实际上它是从实例本身访问的,因此来自同一个线程.
这是简化的代码:

import threading
import time
from collections import deque

class MyQueue(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.q = deque()
        self.start()

    def run(self):
        # pop out queue items every 1 sec
        # (please ignore empty deque for now)
        while True:
            print self.q.popleft()
            time.sleep(1)

    def add_to_q(self, val):
        # this function is called from outside
        self.q.append(val)

# main
# fill the queue with values
qu = MyQueue()
for i in range(1:100):
    qu.add_to_q(i)
Run Code Online (Sandbox Code Playgroud)

因此,虽然在实例中添加和删除队列中的项目,但是由于从实例外部调用添加函数,是否存在风险?

编辑:
因为我需要修改我的双端队列中的项目,所以我不得不使用Deque.我所做的是:roatate()到给定的项目,弹出它,修改,推回它并旋转()它回到它原来的位置.
除非我找到一种在队列中实现修改项目的方法,否则我将不得不坚持使用Deque

python thread-safety deque

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

添加到在Python中迭代的deque?

我在Python中有一个deque,我正在迭代.有时候,当我正在进行交互时,deque会发生变化RuntimeError: deque mutated during iteration.

如果这是一个Python列表而不是一个双端队列,我只是迭代一个列表的副本(通过一个切片my_list[:],但由于切片操作不能用于deques,我想知道什么是最pythonic处理这个的方法是?

我的解决方案是导入复制模块,然后迭代一个副本,这样for item in copy(my_deque):很好,但因为我搜索了这个主题的高低,我想我会在这里发帖询问?

python deque

11
推荐指数
1
解决办法
5663
查看次数

Deque随机访问python中的O(n)而C++中的O(1),为什么?

C++ deque:

随机访问 - 常数O(1)

Python deque:

索引访问在两端都是O(1),但在中间减慢到O(n).

如果我没有遗漏任何东西,那么其他一切对于python和C++中的deques都同样快,至少在复杂性方面.在某些情况下,有什么能让python的deque变得更好吗?如果没有,为什么他们不切换到C++有什么?

python deque

11
推荐指数
1
解决办法
618
查看次数

STL 双端队列 Push_front 函数的 libc++ 实现是否符合标准?

C++ 标准 (N4901) 参考 deque push_front 函数进行了这样的说明:

\n
\n

实现应为 \xe2\x80\x9ccontainer\xe2\x80\x9d 列中显示的所有容器类型提供这些操作,并应实现它们以便采用摊余常数时间。

\n
\n

如果我没有记错的话,这意味着符合标准的实现应该提供一个需要摊销 O(1) 时间的双端队列 push_front 函数。

\n

然而,在查看了源代码并在 gdb 下运行了一些测试程序之后,我开始相信 deque push_front 函数的 libc++ 实现实际上具有 O(log n) 摊销时间。

\n

对于上下文:STL 双端队列是使用两级数组在 libc++ 中实现的,它map是一个动态数组,其中包含指向名为 的固定大小数组的指针blocks。只有一个map,其大小不受限制,并且有无数个blocks,其大小是固定的。

\n

这是一个准确的可视化(为了证明,见下文),显示了map每个新的外观blockblocks按分配顺序命名,因此 b01 是第一个block分配的,b02 是第二个block分配的,依此类推)是map通过调用添加到push_front. 线性时间操作,例如map通过复制或移动整个数组memmove标记为:

\n
[]\n[b01]\n[b02, b01] copied\n[b03, b02, b01, ___] copied\n[b04, b03, b02, b01] …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm stl deque data-structures

11
推荐指数
0
解决办法
259
查看次数

Tarjan和Mihaescu的"*更简单*实时可连接的双端"工作在哪里?

我一直在寻找持久的实时可连接deques的工作.有各种方法具有用于连接deques的对数复杂性,有些方法具有摊销的常数时间实施,但实时(非摊销)具有恒定时间连接的deques少得多.

众所周知的实时可连接deque是1999年由Haim Kaplan和Robert Tarjan撰写的文章,Purely Functional,Real-Time Deques with Catenation.然而,关于deques 的维基百科页面这个梦幻般的StackOverflow答案都提到了Robert Tarjan和Radu Mihaescu最近的工作(显然是2003年),这应该更简单.

有没有人链接到Robert Tarjan和Mihaescu关于这项工作的出版物?我在浏览网页时唯一能找到的就是一个.doc文档,显然是某些课程笔记的一部分,而且这种格式既不舒服,也不够可靠,无法实现.

有些网页将第二作者称为"Mihaesau",这似乎是一个错误.我找到了一个DBLP的出版物列表,更近期,没有提及可连接的队列,以及一个微薄的网页,没有链接到出版物部分.

algorithm deque data-structures

10
推荐指数
1
解决办法
949
查看次数

将队列转储到python中的列表/数组中

我正在运行许多线程并在队列中收集结果.我想将其转储到数组或列表中,以便我可以进行索引并检索这些结果.队列中的每个元素都是维度为n的数组.我想访问这些数组.请你告诉我,我怎么办?

 def dump_queue(model_queue):
 queue_list = []
 for i in iter(model_queue.get,'STOP'):
         queue_list.append(i)
  return queue_list




aux_model=train_svm(np.array(trainExample),np.array(trainLabel))
model_queue.put(aux_model.coef_)
Run Code Online (Sandbox Code Playgroud)

因此,数组是学习的模型参数svm.model_queue在线程之间共享.我想访问每个模型参数向量而不是模型参数的每个条目.

python queue deque

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

snapdragon设备上的android应用程序dequeuebuffer错误

在snapdragon设备上运行我们的android应用程序时遇到了一些奇怪的崩溃,但在其他设备上运行良好.以下是进程死前的一些日志:

W/Adreno-EGLSUB( 3075): <DequeueBuffer:583>: dequeue native buffer fail: Unknown error 2147483646, buffer=0x0, handle=0x0
W/Adreno-EGLSUB( 3075): <SwapBuffers:1300>: Invalid native buffer. Failed to queueBuffer
W/Adreno-EGLSUB( 3075): <updater_thread:456>: native buffer is NULL
D/QCUtilClass( 2464): extended extractor not needed, return default.
Run Code Online (Sandbox Code Playgroud)

和:

E/BufferQueue(  357): [xxx.xxxx.xxxxx(our game app)] dequeueBuffer: can't dequeue multiple buffers without setting the buffer count
W/Adreno-EGLSUB( 3075): <DequeueBuffer:583>: dequeue native buffer fail: Invalid argument, buffer=0x0, handle=0x0
W/Adreno-ES20( 3075): <gl2_surface_swap:43>: GL_OUT_OF_MEMORY
W/Adreno-EGL( 3075): <qeglDrvAPI_eglSwapBuffers:3590>: EGL_BAD_SURFACE
Run Code Online (Sandbox Code Playgroud)

.....

任何帮助将不胜感激.谢谢.

android deque

10
推荐指数
1
解决办法
6145
查看次数