deque如何管理内存?

时间:2015-10-27 06:59:08

标签: c++ containers

使用deque容器时,我有些困惑。

我将vectordeque进行了比较,我动态输入了整数值,并观察到在几次插入后,矢量的对象开始移动并且地址已经改变,这似乎是合乎逻辑的。然而,即使在我输入几百个整数之后,deque的对象仍保留在内存中的相同位置。

这个观察结果让我觉得deque保留了比vector更大的内存,但是如果它是真的那么动态记忆而不是静态的重点是什么?即使它确实如此,它会在某处耗尽内存并需要更改内存上的位置,所以下一个问题是它是移动每个对象还是只是开始在其他地方使用内存并将其与之前的位置相关联?

deque容器支持迭代器算术,但使用它是否安全?我想知道deque如何管理内存而不是人们如何使用它。

3 个答案:

答案 0 :(得分:1)

deque是迷你向量的双链表。这意味着地址稳定。

除非执行使迭代器无效的操作,否则迭代器算法有效。

对于矢量也是如此

答案 1 :(得分:0)

来自this std::deque reference

  

...典型的实现使用一系列单独分配的固定大小数组

您可以将其视为数组列表。

答案 2 :(得分:0)

deque通常实现为一系列固定长度的元素页面。如果附加元素,当页面已满时,将在页面索引的末尾分配和添加新页面。这保证了,如果仅在结尾或开头添加或删除元素,那些已经存储的元素不会在内存中移动(在标准说法中,push_back,pop_back不会对现有元素的引用无效) ,push_front和pop_front)。