【发布时间】:2015-10-16 07:58:15
【问题描述】:
据我了解,deque 会根据需要分配新的恒定大小的内存块,但不能保证它们是连续的。这确保了从任一端移除不会使当前指向双端队列的任何迭代器无效。
这种内存布局在某些情况下很方便,但通常比连续存储内存要慢。
用于更快的连续内存的首选容器是向量,但它不允许您从前面推送或弹出。
我不明白为什么会这样。
我确信可以实现使用连续内存的双端队列,而且它似乎严格优于向量。它的内存布局将同样快,并且还允许从前面高效推送/弹出。
不仅如此,我觉得从设计的角度来看它也会更有意义。连续双端队列将是其速度的首选,当它的内存布局更适合手头的问题时,将使用非连续双端队列。
如果我有什么遗漏或近视,请告诉我。为什么标准库中没有连续的双端队列?
【问题讨论】:
-
@gha.st: 从什么时候开始?
-
@YvesDaoust 因为它会换行,因此使用了两个内存区域?
-
@gha.st:这是一个单一的、连续的区域。
-
@YvesDaoust 取决于您的定义。但是您可以将
vector<T>的全部内容发送到期望T*的函数中。这对于环形缓冲区是不可能的。 -
@djscrew:缺乏需求/证据表明它经常显着有益,想要实现它的人会满足于一个通用的实现,没有人愿意提出它。你可以编写一个实现并自己提出你知道的,甚至提出它来提升,如果它在那里流行和健壮,那么稍后的某个时候标准。
标签: c++ c++11 data-structures stl