C++ deque如何管理内存?

C++ deque如何管理内存?,c++,containers,C++,Containers,在使用deque容器时,我感到有些困惑 我将一个向量与一个deque进行比较,动态输入整数值,观察到在插入几次之后,向量的对象开始移动,地址也发生了变化,这似乎是合乎逻辑的。然而,即使在我输入了几百个整数之后,deque的对象仍保留在内存中的相同位置 这个观察给了我一个想法,即deque保留的内存比vector大得多,但如果这是真的,那么拥有动态内存而不是静态内存有什么意义呢?即使它这样做了,它也会在某个地方耗尽内存,需要更改内存中的位置,因此下一个问题是它是否移动了每个对象,或者只是开始在其他

在使用
deque
容器时,我感到有些困惑

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

这个观察给了我一个想法,即deque保留的内存比vector大得多,但如果这是真的,那么拥有动态内存而不是静态内存有什么意义呢?即使它这样做了,它也会在某个地方耗尽内存,需要更改内存中的位置,因此下一个问题是它是否移动了每个对象,或者只是开始在其他地方使用内存并将其与以前的位置链接

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

来源:

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


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

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

deque是微型向量的双链接列表。这意味着地址是稳定的

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

向量也是如此

可能重复的