91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++11如何管理容器的容量

發布時間:2021-11-26 15:13:31 來源:億速云 閱讀:177 作者:iii 欄目:大數據

本篇內容介紹了“C++11如何管理容器的容量”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

capacity和size

理解capacity和size的區別非常重要,容器的size是指已經保存在容器中的數據的個數,而容量是指在不再重新分配內存的前提下容器最大可以包含的數據的個數。舉個例子:容量為2升的瓶子裝了1升水。2升是capacity,1升是size。

管理容器的容量

在絕大多數情況下,程序員不必關注容器類內存管理的細節,把這些工作完全交給C++標準庫。但是有時也會有例外:

  1. 要求操作的響應非常快,快到不能忽略從堆中申請內存的時間。

  2. 使用的空間非常大,大到不希望容器保持多余的內存空間。

這時就需要主動干預內存的取得和釋放動作。C++標準庫為此提供了相應的成員函數。

capacity:取得容器的容量

size:取得已經保存在容器中數據的個數。

reserve:分配至少可以容納指定數量元素的內存空間。

shrink_to_fit:釋放多余的內存空間,只保留可以容納容器中數據的最小內存。

示例代碼

vector<int> v;
//v中沒有元素,capacity為0
cout << v.capacity() << endl;//0

v.reserve(1000);
//預先取得保存1000個元素的空間,capacity為1000
cout << v.capacity() << endl;//1000

for(int i = 0; i < 1000; i++){
   v.push_back(i);
}
//空間已經取得,不再增加,capacity仍為1000
cout << v.capacity() << endl;//1000

for(int i = 0; i < 100000; i++){
   v.push_back(i);
}
//繼續添加元素,自動分配空間
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

有兩點需要特別說明:

  1. 在添加元素時,為了減少內存分配的次數,內存空間會分段取得,所以經常會略大于數據的個數

  2. shrink_to_fit只是發出釋放內存的請求,這個請求不一定總會被響應。

“C++11如何管理容器的容量”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

大宁县| 江安县| 历史| 乌鲁木齐市| 始兴县| 旅游| 双鸭山市| 和静县| 那曲县| 左权县| 阿拉善左旗| 昆山市| 香港| 安康市| 灌云县| 彰化县| 新余市| 会宁县| 襄城县| 紫阳县| 新乐市| 梅河口市| 监利县| 翁源县| 囊谦县| 台北县| 莫力| 景洪市| 南木林县| 温泉县| 金平| 贵港市| 临湘市| 高平市| 堆龙德庆县| 措美县| 松潘县| 湖口县| 青川县| 克什克腾旗| 南江县|