先看看《C++ Primer》中對resize()函數兩種用法的介紹:
1、resize(n)
調整容器的長度大小,使其能容納n個元素。
如果n小於容器的當前的size,則刪除多出來的元素。
否則,添加采用值初始化的元素。
2、 resize(n,t)
多一個參數t,將所有新添加的元素初始化為t。
而reserver()的用法只有一種
reserve(n)
預分配n個元素的存儲空間。
了解這兩個函數的區別,首先要搞清楚容器的capacity(容量)與size(長度)的區別。
size指容器當前擁有的元素個數;
而capacity則指容器在必須分配新存儲空間之前可以存儲的元素總數。
也可以說是預分配存儲空間的大小。
resize()函數和容器的size息息相關。調用resize(n)后,容器的size即為n。
至於是否影響capacity,取決於調整后的容器的size是否大於capacity。
reserve()函數和容器的capacity息息相關。
調用reserve(n)后,若容器的capacity<n,則重新分配內存空間,從而使得capacity等於n。
如果capacity>=n呢?capacity無變化。
從兩個函數的用途可以發現,容器調用resize()函數后,所有的空間都已經初始化了,所以可以直接訪問。
而reserve()函數預分配出的空間沒有被初始化,所以不可訪問。
一個簡單的測試用例:
vector<int> a;
a.reserve(100);
a.resize(50);
cout<<a.size()<<" "<<a.capacity()<<endl;
a.resize(150);
cout<<a.size()<<" "<<a.capacity()<<endl;
a.reserve(50);
cout<<a.size()<<" "<<a.capacity()<<endl;
a.resize(50);
cout<<a.size()<<" "<<a.capacity()<<endl;
