题
由于唯一的操作所需的容器应用于在一堆是:
- 回()
- push_back()
- pop_back()
为什么是默认的容器,为这一双端,而不是一个矢量?
不双端的重新分配给一个缓冲器元件之前()使push_front()是一个有效的运作?不是这些要素的浪费,因为他们将永远不会被用的上下文中的一个堆栈?
如果没有的开销用于使用这种方式双端,而不是一种矢量,为什么是默认的用于符矢量不是一个双端吗?(符需要的前面(),push_back(),和pop_back()--基本上是相同堆)
更新基础上的答复如下:
它的出现,这种方式双端通常是实施是一个可变的小阵列的固定小组。这使得不断增长的速度比一矢量(这需要重新分配和复制),所以东西就像一堆,这是所有关于添加和去除元,双端可能是一个更好的选择。
符需要的索引编制严重,因为每一个去除并插入需要你跑pop_heap()或push_heap().这可能使矢量的一个更好的选择,因为添加一个元素仍然是分摊的不断反正。
解决方案
作为容器的增长,重新分配,用于一个矢量要求复制所有要素进入新块的存储器。增长的一个双端分配一个新的框并链接到列表中的区块-没有副本的需要。
当然,你可以指定一个不同的背容器被使用的,如果你喜欢。所以如果你有一堆,你知道的是不要长大得多,告诉它使用一种矢量,而不是一个双端,如果这是你的偏好。
其他提示
看到草药萨特 大师的每周54 对相对优点的矢量和双端的情况会怎么做。
我想象的不一致之符和队列很简单,就是不同人民实现他们。
不隶属于 StackOverflow