C++11新特性- 管理容器的容量
扫描二维码
随时随地手机看文章
capacity和size
理解capacity和size的区别非常重要,容器的size是指已经保存在容器中的数据的个数,而容量是指在不再重新分配内存的前提下容器最大可以包含的数据的个数。举个例子:容量为2升的瓶子装了1升水。2升是capacity,1升是size。
管理容器的容量
在绝大多数情况下,程序员不必关注容器类内存管理的细节,把这些工作完全交给C++标准库。但是有时也会有例外:
要求操作的响应非常快,快到不能忽略从堆中申请内存的时间。
使用的空间非常大,大到不希望容器保持多余的内存空间。
这时就需要主动干预内存的取得和释放动作。C++标准库为此提供了相应的成员函数。
capacity:取得容器的容量
size:取得已经保存在容器中数据的个数。
reserve:分配至少可以容纳指定数量元素的内存空间。
shrink_to_fit:释放多余的内存空间,只保留可以容纳容器中数据的最小内存。
示例代码
vector
有两点需要特别说明:
在添加元素时,为了减少内存分配的次数,内存空间会分段取得,所以经常会略大于数据的个数
shrink_to_fit只是发出释放内存的请求,这个请求不一定总会被响应。
作者观点
要求不是很严格的时候,可以充分享受语言带来的便利和自由;条件很苛刻时,又可以实现充分的控制。这种收放自如的感觉恐怕只有C++程序员才能享受。