STL——STL中vector的實現原理
STL中vector的實現原理:
vector的資料安排以及操作方式與array非常類似。兩者的唯一差別在於空間的運用的靈活性。
array是靜態空間,一旦配置好了就不能再改變了。如果程式需要一個更大空間的array,只能自己再申請一個更大的array,然後將以前array中的內容全部拷貝到新的array中。
vector是動態空間,隨著元素的加入,它的內部機制會自動擴充空間以容納新的元素。vector的關鍵技術在於其對大小的控制以及重新配置時的資料移動效率。
vector採用的資料結構很簡單:線性的連續空間。
它以兩個迭代器start和finish分別指向配置得來的連續空間中目前已經被使用的空間。迭代器end_of_storage指向整個連續空間的尾部。
為了降低空間配置時候的速度,vector實際配置的大小可能比客戶端需求量更大一些,以備將來可能的擴充。
如果vector在增加一個元素的時候,超過了自身最大的容量。vector則將自身的容量擴充至原來的兩倍。
擴充空間需要經過的步驟:重新配置空間,元素移動,釋放舊記憶體空間。(vector機制將舊空間中的備用空間也拷貝到新空間來了,感覺沒必要)
一旦vector空間重新配置,則指向原來vector的所有迭代器都失效了,因為vector的地址改變了。
相關文章
- STL vector的內部實現原理及基本用法
- 《STL原始碼剖析》-- stl_vector.h原始碼
- C++ STL -- vectorC++
- STL vector中的shrink_to_fit方法(32)
- 初探STL容器之Vector
- STL:vector用法總結
- C++STL第二篇(vector的原理用法)C++
- STL Vector remove()和erase()的使用REM
- STL原始碼剖析——vector容器原始碼
- C++ STL學習——vectorC++
- STL 之 vector 容器詳解
- C++_STL—容器Vector篇C++
- UVA 11991 STL中map、vector的應用
- C++STL::兩種方式實現STL容器的reference語義C++
- GUN C++ STL中的vector的記憶體分配器C++記憶體
- 精通標準模板庫STL的向量Vector用法
- 例說資料結構&STL(一)——vector資料結構
- 問題多多的STL實現 (轉)
- stl 中list 或者vector正確使用find查詢類物件物件
- C++標準模板庫(STL)迭代器的原理與實現C++
- STL——STL中string的寫時拷貝機制
- C++ 學習筆記(1):STL、Vector 與 SetC++筆記
- STL
- 模擬STL連結串列類的實現
- 進階篇_STL中的容器
- VC++中STL的使用 (轉)C++
- 《STL原始碼剖析》 -- stl_algo.h原始碼Go
- 《STL原始碼剖析》-- stl_algobase.h原始碼Go
- 《STL原始碼剖析》-- stl_hashtable.h原始碼
- 《STL原始碼剖析》-- stl_multimap.h原始碼
- 《STL原始碼剖析》-- stl_map.h原始碼
- 《STL原始碼剖析》-- stl_multiset.h原始碼
- 《STL原始碼剖析》-- stl_set.h原始碼
- 《STL原始碼剖析》-- stl_tree.h原始碼
- 《STL原始碼剖析》-- stl_heap.h原始碼
- 《STL原始碼剖析》-- stl_slist.h原始碼
- 《STL原始碼剖析》-- stl_queue.h原始碼
- 《STL原始碼剖析》-- stl_stack.h原始碼