2010-11-21 32 views
0

如何實現C++向量類以允許動態調整數組大小?如何實現C++向量類以允許動態調整數組大小?

它是通過鏈表類型的實現來完成的嗎? 每次添加或移除元素時,是從頭開始創建一個新數組?

謝謝, ř

+0

另請注意,鏈表實現雖然看起來很吸引人,但並未滿足'std :: vector'要求,即*內存中的連續佈局。* – 2010-11-21 22:52:54

回答

2

典型行爲:在內部,std::vector具有長度capacity的連續陣列。在任何給定的點上,實際上只使用size元素。如果在任何時候size會超過capacity(假設你叫push_back()很多),一個新的,更大的內部數組被分配(capacity可能翻倍)。然後將舊數組中的所有元素都複製到新數組中,並刪除舊元素和數組。

+0

太棒了!感謝大家! – Russel 2010-11-21 23:07:08

0

細節與實現有關,但由矢量分配的內存塊保證連續。

GCC在重新分配內存時使用2.0係數,MSVC使用1.5係數。

+0

前段時間有人討論了關於最佳係數的C++。lang.moderated,Alexandrescu的顯着參與,我認爲他們推斷它是'alpha'('x^2 = x + 1'的正根) ) – 2010-11-22 07:28:24

0

大多數實現都使用一個簡單的數組,並且每當數組變滿時,容量加倍。這確實涉及到將現有元素複製到新的內存塊中,但補償的原因是您不必在一段時間內再次執行此操作。 (使用這種技術,元素添加運行在分期固定的時間內。)

相關問題