本篇內(nèi)容介紹了“C++11如何管理容器的容量”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)是一家專注于成都做網(wǎng)站、網(wǎng)站建設(shè)與策劃設(shè)計,海安網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:海安等地區(qū)。海安做網(wǎng)站價格咨詢:18982081108
capacity和size
理解capacity和size的區(qū)別非常重要,容器的size是指已經(jīng)保存在容器中的數(shù)據(jù)的個數(shù),而容量是指在不再重新分配內(nèi)存的前提下容器最大可以包含的數(shù)據(jù)的個數(shù)。舉個例子:容量為2升的瓶子裝了1升水。2升是capacity,1升是size。
管理容器的容量
在絕大多數(shù)情況下,程序員不必關(guān)注容器類內(nèi)存管理的細節(jié),把這些工作完全交給C++標(biāo)準庫。但是有時也會有例外:
要求操作的響應(yīng)非???,快到不能忽略從堆中申請內(nèi)存的時間。
使用的空間非常大,大到不希望容器保持多余的內(nèi)存空間。
這時就需要主動干預(yù)內(nèi)存的取得和釋放動作。C++標(biāo)準庫為此提供了相應(yīng)的成員函數(shù)。
capacity:取得容器的容量
size:取得已經(jīng)保存在容器中數(shù)據(jù)的個數(shù)。
reserve:分配至少可以容納指定數(shù)量元素的內(nèi)存空間。
shrink_to_fit:釋放多余的內(nèi)存空間,只保留可以容納容器中數(shù)據(jù)的最小內(nèi)存。
示例代碼
vector<int> v;
//v中沒有元素,capacity為0
cout << v.capacity() << endl;//0
v.reserve(1000);
//預(yù)先取得保存1000個元素的空間,capacity為1000
cout << v.capacity() << endl;//1000
for(int i = 0; i < 1000; i++){
v.push_back(i);
}
//空間已經(jīng)取得,不再增加,capacity仍為1000
cout << v.capacity() << endl;//1000
for(int i = 0; i < 100000; i++){
v.push_back(i);
}
//繼續(xù)添加元素,自動分配空間
cout << v.capacity() << endl;//128000
for(int i = 0; i < 100000; i++){
v.pop_back();
}
//元素雖然刪除,空間維持不變。
cout << v.capacity() << endl;//128000
v.shrink_to_fit();
//釋放多余空間。
cout << v.capacity() << endl;//1000
有兩點需要特別說明:
在添加元素時,為了減少內(nèi)存分配的次數(shù),內(nèi)存空間會分段取得,所以經(jīng)常會略大于數(shù)據(jù)的個數(shù)
shrink_to_fit只是發(fā)出釋放內(nèi)存的請求,這個請求不一定總會被響應(yīng)。
“C++11如何管理容器的容量”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
文章名稱:C++11如何管理容器的容量
鏈接分享:http://sd-ha.com/article24/jggdce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、網(wǎng)站策劃、企業(yè)建站、標(biāo)簽優(yōu)化、小程序開發(fā)、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)