c++ vector中的resize與reserve
阿新 • • 發佈:2018-12-19
關於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以內的空間均被初始化,可以訪問。