STL中resize 與reserve 的區別

2021-09-21 05:43:08 字數 1020 閱讀 1973

首先了解2個概念:

size指容器當前擁有的元素個數,

capacity則指容器在必須分配新儲存空間之前可以儲存的元素總數,即預分配儲存空間的大小。

vector的存放有3種

1.普通:vecotrv1;

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

效率最低。每push_back乙個新元素,size就會+1,當size超出capacity時。capacity根據一定的演算法(線性增長或者翻倍)去申請一塊更大的記憶體,然後把原來的vector內容拷貝到新的位址上,並釋放原來的記憶體

優點:不知道一共會有多少個元素,預設方式動態增長。

2.resize:vecotrv2;

v2.resize(100);

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

v2的size變成了100,至於capacity則看新的newsize和原先的oldsize的大小關係。

如果 newsize > oldsize,則先至少增加 (oldsize - newsize) 個的capacity,再在原vector的末尾增加(oldsize - newsize) 個預設構造出來的元素

如果 newsize < oldsize,則把(newsize,oldsize]個元素直接抹去,但是capacity還是不變。

3.reserve:vectorv3;

v3.reserve(100);

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

與容器的capacity相關

如果 newsize > oldsize,則會重新申請newsize個capacity,並且把原來的資料全都構造過去,但是對oldsize之後的資料,不會初始化。

如果 newsize < oldsize,什麼都不做

reserve和resize都不會使capacity變小,但都有可能使capacity變大,具體怎麼變大,reserve和resize是不一樣的,reserve能準確控制capacity;而resize不能,vc裡是每次增大一半的當前capacity

vector中的resize與reserve區別

首先必須弄清楚兩個概念 1.capacity 指容器在分配新的儲存空間之前能儲存的元素總數。2.size 指當前容器所儲存的元素個數 在弄清這兩個概念以後,很容易懂resize和reserve的區別 1 reserve表示容器預留空間,但並不是真正的建立物件,需要通過insert 或push bac...

容器中 reserve和resize

vector 的reserve增加了vector的capacity,但是它的size沒有改變!而 resize 改變了vector的capacity 同時也增加了它的size!原因如下 reserve是容器預留空間,但在空間內不真正建立元素物件,所以在沒有新增新的物件之前,不能引用容器內的元素。加入...

js中resize多次執行

參考 總是延遲1s 最好0.5秒左右 執行最後一次的resize。var timer null window.addeventlistener resize function timer settimeout function 1000 注 只有在拖拽視窗完成後才會改變echarts的大小!如果過程...