STL Vector記憶體機制

2021-08-01 18:07:54 字數 919 閱讀 1786

vector可以看作是乙個動態陣列,其記憶體是連續的,並具有以下特性:

(1)vector中的size表示當前實際資料數量,capacity 則表示當前可容納的數量,即已開闢的記憶體。

(2)釋放(pop_back)、刪除(erase) 和 清空(clear) 只會改變size,不會改變capacity 。只有在vector析構的時候才會清空所有記憶體。

(3)當追加(push_back)、 插入(insert)等操作導致vector需要擴容時,採用下面準則。(vs2013下vector原始碼)

size_type _grow_to(size_type _count) const

解釋一下:設當前容量為a,需要額外增加的容量為b,則擴容後的容量為max(1.5a, a+b).

(4)擴容時的操作流程為:開闢新記憶體 -> copy資料 -> 釋放舊記憶體。因此頻繁的導致vector擴容(如for迴圈持續push_back)會使得程式效率降低。因此,如有需要,可以提前通過初始化或者resize、reserve來預先開闢較大的容量。

(5)如果想要提前釋放掉vector開闢的記憶體,可以使其與乙個空vector進行交換,如下:

// 建立乙個vector

vector

data;

for(int i = 0; i < 10; ++i)

data.push_back(i);

// 與空vector進行交換

vector

().swap(data);

// 或者

data.swap(vector

());

stl vector 記憶體管理

size是指容器當前擁有元素的個數,而capacity是指容器在必須分配新的儲存空間之前可以存放的元素總數。如vectorivect 10 ivect.capacity 10,ivect.size 0,當你向ivect中插入元素時,只要沒有超過十個,那麼capacity就不變,而size為你插入的元...

STL vector記憶體分配

標籤 c stlvector 記憶體 2013 12 15 19 57 3708人閱讀收藏 舉報 stl 10 作者同類文章x 在stl的容器中,vector可以說是最容易理解和使用的容器了,以前使用陣列的時候,如果不確定有多少資料要儲存,就會預先分配乙個大的陣列,如果實際沒有用到那麼多,又會浪費很...

stl vector記憶體分配

1 呼叫push back時,其內部的記憶體分配是如何進行的?2 呼叫clear時,內部是如何具體實現的?若想將其記憶體釋放,該如何操作?vector的工作原理是系統預先分配一塊capacity大小的空間,當插入的資料超過這個空間的時候,這塊空間會讓某種方式擴充套件,但是你刪除資料的時候,它卻不會縮...