capacity和size
理解capacity和size的區(qū)別非常重要,容器的size是指已經(jīng)保存在容器中的數(shù)據(jù)的個數(shù),而容量是指在不再重新分配內(nèi)存的前提下容器最大可以包含的數(shù)據(jù)的個數(shù)。舉個例子:容量為2升的瓶子裝了1升水。2升是capacity,1升是size。
管理容器的容量
在絕大多數(shù)情況下,程序員不必關注容器類內(nèi)存管理的細節(jié),把這些工作完全交給C++標準庫。但是有時也會有例外:
要求操作的響應非???,快到不能忽略從堆中申請內(nèi)存的時間。
使用的空間非常大,大到不希望容器保持多余的內(nèi)存空間。
這時就需要主動干預內(nèi)存的取得和釋放動作。C++標準庫為此提供了相應的成員函數(shù)。
capacity:取得容器的容量
size:取得已經(jīng)保存在容器中數(shù)據(jù)的個數(shù)。
reserve:分配至少可以容納指定數(shù)量元素的內(nèi)存空間。
shrink_to_fit:釋放多余的內(nèi)存空間,只保留可以容納容器中數(shù)據(jù)的最小內(nèi)存。
示例代碼
?
vector
????
有兩點需要特別說明:
在添加元素時,為了減少內(nèi)存分配的次數(shù),內(nèi)存空間會分段取得,所以經(jīng)常會略大于數(shù)據(jù)的個數(shù)
shrink_to_fit只是發(fā)出釋放內(nèi)存的請求,這個請求不一定總會被響應。
作者觀點
要求不是很嚴格的時候,可以充分享受語言帶來的便利和自由;條件很苛刻時,又可以實現(xiàn)充分的控制。這種收放自如的感覺恐怕只有C++程序員才能享受。