resize()幻枉,設(shè)置大信錾(size);
reserve(),設(shè)置容量(capacity);
size()是分配容器的內(nèi)存大小展辞,而capacity()只是設(shè)置容器容量大小奥邮,但并沒(méi)有真正分配內(nèi)存。
打個(gè)比方:正在建造的一輛公交車(chē)罗珍,車(chē)?yán)锩婵梢栽O(shè)置40個(gè)座椅(reserve(40);)洽腺,這是它的容量,但并不是說(shuō)它里面就有了40個(gè)座椅覆旱,只能說(shuō)明這部車(chē)內(nèi)部空間大小可以放得下40張座椅而已蘸朋。而車(chē)?yán)锩姘惭b了40個(gè)座椅(resize(40);),這個(gè)時(shí)候車(chē)?yán)锩娌耪嬲辛?0個(gè)座椅扣唱,這些座椅就可以使用了
1藕坯、resize(n)?
調(diào)整容器的長(zhǎng)度大小,使其能容納n個(gè)元素噪沙。
如果n小于容器的當(dāng)前的size炼彪,則刪除多出來(lái)的元素。
否則正歼,添加采用值初始化的元素辐马。
2、?resize(n局义,t)
多一個(gè)參數(shù)t喜爷,將所有新添加的元素初始化為t。
而reserver()的用法只有一種
reserve(n)
預(yù)分配n個(gè)元素的存儲(chǔ)空間萄唇。
了解這兩個(gè)函數(shù)的區(qū)別檩帐,首先要搞清楚容器的capacity(容量)與size(長(zhǎng)度)的區(qū)別。
size指容器當(dāng)前擁有的元素個(gè)數(shù)另萤;
而capacity則指容器在必須分配新存儲(chǔ)空間之前可以存儲(chǔ)的元素總數(shù)湃密。
也可以說(shuō)是預(yù)分配存儲(chǔ)空間的大小。
resize()函數(shù)和容器的size息息相關(guān)四敞。調(diào)用resize(n)后勾缭,容器的size即為n。
至于是否影響capacity目养,取決于調(diào)整后的容器的size是否大于capacity俩由。
reserve()函數(shù)和容器的capacity息息相關(guān)。
調(diào)用reserve(n)后癌蚁,若容器的capacity<n幻梯,則重新分配內(nèi)存空間兜畸,從而使得capacity等于n。
如果capacity>=n呢碘梢?capacity無(wú)變化咬摇。
從兩個(gè)函數(shù)的用途可以發(fā)現(xiàn),容器調(diào)用resize()函數(shù)后煞躬,所有的空間都已經(jīng)初始化了肛鹏,所以可以直接訪(fǎng)問(wèn)。
而reserve()函數(shù)預(yù)分配出的空間沒(méi)有被初始化恩沛,所以不可訪(fǎng)問(wèn)在扰。
一個(gè)簡(jiǎn)單的測(cè)試用例:
??????? 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;