首先了解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的大小!如果過程...