vector中的resize()函數 VS reserve()函數

轉自http://www.cnblogs.com/biyeymyhjob/archive/2013/05/11/3072893.html
C++:vector中的resize()函數 VS reserve()函數
http://www.cplusplus.com/reference/vector/vector/vector/

寫代碼的時候無意錯用了這兩個函數 導致測試的時候,程序運行崩潰 發現這兩個函數還是有區別的

void reserve (size_type n);
reserver函數用來給vector預分配存儲區大小,即capacity的值 ,但是沒有給這段內存進行初始化。reserve 的參數n是推薦預分配內存的大小,實際分配的可能等於或大於這個值,即n大於capacity的值,就會reallocate內存 capacity的值會大於或者等於n 。這樣,當ector調用push_back函數使得size 超過原來的默認分配的capacity值時 避免了內存重分配開銷。

需要注意的是:reserve 函數分配出來的內存空間,只是表示vector可以利用這部分內存,但vector不能有效地訪問這些內存空間,訪問的時候就會出現越界現象,導致程序崩潰。

void resize (size_type n);
void resize (size_type n, value_type val);
resize函數重新分配大小,改變容器的大小,並且創建對象

當n小於當前size()值時候,vector首先會減少size()值 保存前n個元素,然後將超出n的元素刪除(remove and destroy)

當n大於當前size()值時候,vector會插入相應數量的元素 使得size()值達到n,並對這些元素進行初始化,如果調用上面的第二個resize函數,指定val,vector會用val來初始化這些新插入的元素

當n大於capacity()值的時候,會自動分配重新分配內存存儲空間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章