由于唯一的操作所需的容器应用于在一堆是:

  • 回()
  • push_back()
  • pop_back()

为什么是默认的容器,为这一双端,而不是一个矢量?

不双端的重新分配给一个缓冲器元件之前()使push_front()是一个有效的运作?不是这些要素的浪费,因为他们将永远不会被用的上下文中的一个堆栈?

如果没有的开销用于使用这种方式双端,而不是一种矢量,为什么是默认的用于符矢量不是一个双端吗?(符需要的前面(),push_back(),和pop_back()--基本上是相同堆)


更新基础上的答复如下:

它的出现,这种方式双端通常是实施是一个可变的小阵列的固定小组。这使得不断增长的速度比一矢量(这需要重新分配和复制),所以东西就像一堆,这是所有关于添加和去除元,双端可能是一个更好的选择。

符需要的索引编制严重,因为每一个去除并插入需要你跑pop_heap()或push_heap().这可能使矢量的一个更好的选择,因为添加一个元素仍然是分摊的不断反正。

有帮助吗?

解决方案

作为容器的增长,重新分配,用于一个矢量要求复制所有要素进入新块的存储器。增长的一个双端分配一个新的框并链接到列表中的区块-没有副本的需要。

当然,你可以指定一个不同的背容器被使用的,如果你喜欢。所以如果你有一堆,你知道的是不要长大得多,告诉它使用一种矢量,而不是一个双端,如果这是你的偏好。

其他提示

看到草药萨特 大师的每周54 对相对优点的矢量和双端的情况会怎么做。

我想象的不一致之符和队列很简单,就是不同人民实现他们。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top