1. 程式人生 > >c++ vector中的resize與reserve

c++ vector中的resize與reserve

關於STL中vector的resize與reserve方法,作以下記錄:

1.reserve(n):

預分配n個元素的儲存空間。如:

vector<int> vecData;
vecData.reserve(10);

呼叫reserve(10)方法後,則為vecData預分配了可以儲存十個int物件的儲存空間,但僅僅是分配空間,裡面並沒有儲存物件。

我們知道容器中會有初始預分配的儲存空間capacity(容量),當reserve(n)中的n超過capacity後,該容器會重新分配儲存空間使capacity >= n;若n <= capacity,那麼capacity無變化。

2.resize(n)/resize(n,t):

resize(n): 改變容器的size,使其為n。若原來的size小於n,則增加元素(n - size)個,呼叫預設建構函式初始化新增元素;若原size大於n,則刪除(size - n)個元素,剩下的元素保持不變;若原size等於n,則容器保持不變。

resize(n, t): 作用與resize(n)相同,只不過新增的元素初始化為t,舉個例子:

vector<int> vecData(3, 3);    // 將vecData初始化,三個元素均為3
vecData.resize(5, 2);         // vecData中前三個元素均為3,新增的後兩個元素為2

3.總結

呼叫reverse()函式後,只是改變容器預分配空間,新增空間內沒有初始化,不可訪問;呼叫resize()後,引數n以內的空間均被初始化,可以訪問。