2015-10-27 62 views
2

使用deque容器時我有些困惑。deque如何管理內存?

我有deque相比vector,我動態輸入整數值,並指出,經過幾次插入載體的物體開始移動和地址已經改變了似乎合乎邏輯。然而,即使在輸入了幾百個整數之後,deque的對象仍留在內存中的相同位置。

這個觀察給了我一個想法,即deque保留比vector大得多的內存,但如果它是真的,那麼動態內存而不是static是什麼意思?即使這樣做,它會在某個地方耗盡內存,因此需要更改內存的位置。因此,下一個問題是它會移動每個對象還是隻是開始在其他位置使用內存,並將它與以前的位置相鏈接?

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

+1

的[爲什麼我更喜歡使用向量雙端隊列]可能的複製(http://stackoverflow.com/questions/5345152/why-would-i-prefer-using-vector - 到 - 德克) – smac89

+0

@ Smac89不,它不是 – omidh

回答

0

this std::deque reference

...典型的實現使用單獨分配固定大小的數組

你可以認爲它像數組列表的順序。

0

一個deque通常實現爲一系列固定長度的元素頁面。如果追加元素,當頁面已滿時,新頁面將被分配並添加到頁面索引的末尾。這保證了,如果僅在末尾或開始處添加或移除元素,則已存儲的元素不會在內存中移動(在標準情況下,對現有元素的引用不會被push_back,pop_back ,push_front和pop_front)。

1

deque是一個迷你矢量的雙鏈表。這意味着地址是穩定的。

迭代器運算是有效的,除非執行使迭代器無效的操作。

這是真正的載體也