STL——STL中vector的實現原理

readyao發表於2016-03-24

STL中vector的實現原理:

vector的資料安排以及操作方式與array非常類似。兩者的唯一差別在於空間的運用的靈活性。

array是靜態空間,一旦配置好了就不能再改變了。如果程式需要一個更大空間的array,只能自己再申請一個更大的array,然後將以前array中的內容全部拷貝到新的array中。

vector是動態空間,隨著元素的加入,它的內部機制會自動擴充空間以容納新的元素。

vector的關鍵技術在於其對大小的控制以及重新配置時的資料移動效率。

vector採用的資料結構很簡單:線性的連續空間。


它以兩個迭代器start和finish分別指向配置得來的連續空間中目前已經被使用的空間。迭代器end_of_storage指向整個連續空間的尾部。

為了降低空間配置時候的速度,vector實際配置的大小可能比客戶端需求量更大一些,以備將來可能的擴充。
如果vector在增加一個元素的時候,超過了自身最大的容量。vector則將自身的容量擴充至原來的兩倍。
擴充空間需要經過的步驟:重新配置空間,元素移動,釋放舊記憶體空間。(vector機制將舊空間中的備用空間也拷貝到新空間來了,感覺沒必要)

一旦vector空間重新配置,則指向原來vector的所有迭代器都失效了,因為vector的地址改變了。

相關文章