vector維護的是乙個連續的線性空間,有三個比較重要的指標,start指向目前使用空間的頭,finish指向目前使用空間的尾,end_of_storage指向目前可用空間的尾。增加新元素的時候,如果備用空間不夠,會將容量擴容到兩倍。會經歷「重新配置,元素移動,釋放原空間」等過程,因此,擴容的時候效率會比較低,還需注意擴容後外部**儲存的iterator指標指向的還是舊的節點指標。
記憶體結構如下圖:
· 維護一段連續的記憶體,類似陣列,但可以進行動態操作。
· 隨機訪問方便,支援操作符和vector.at()
· 在內部進行插入刪除操作效率低
· 當動態新增的資料超過vector預設分配的大小時要進行整體的重新分配,拷貝和釋放
// 將尾端元素拿掉,並調整大小
void pop_back()
// 清除[first,last)中的所有元素
iterator erase(iterator first, iterator last)
insert方法在插入時,會判斷當前備用空間是否充足,不足的時候會進行擴容,並將插入節點前後的資料分別拷貝至對應區域,然後填充要插入的資料。 C 序列式容器之vector
容器,顧名思義,是用來容放東西的場所。c 容器容放某種資料結構,以利於對資料的搜尋或排序或其他特殊目的。眾所周知,常用的資料結構不外乎 陣列array,鍊錶list,樹tree,棧stack,佇列queue,雜湊表hashtable,集合set 對映表map等等。容器便是容納這些資料結構的。這些資料...
實現序列式容器 vector
概述 在stl諸多容器中vector一定是使用率最高的了,它使用和資料結果上與array相類似,兩者唯一差別在於 array是靜態空間,而vector是可變空間。因此通常將vector看作可變陣列。由於vector方法較多,在主要此討論實現vector中要注意的幾個點 對於vector而言維護的是一...
STL 序列式容器 vector詳解
vector 的資料安排以及操作方式,與 array 非常相似。兩者唯一的差別在於對空間運用的靈活性。array 是靜態空間,一旦配置了就不能改變。vector 是動態空間,隨著元素的加入,它的內部機制會自行擴充空間以容納新元素。一下內容主要針對 vector 基本的資料結構以及常用的方法進行介紹。...