C++11如何管理容器的容量
本篇内容介绍了“C++11如何管理容器的容量”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
capacity和size
理解capacity和size的区别非常重要,容器的size是指已经保存在容器中的数据的个数,而容量是指在不再重新分配内存的前提下容器最大可以包含的数据的个数。举个例子:容量为2升的瓶子装了1升水。2升是capacity,1升是size。
管理容器的容量
在绝大多数情况下,程序员不必关注容器类内存管理的细节,把这些工作完全交给C++标准库。但是有时也会有例外:
要求操作的响应非常快,快到不能忽略从堆中申请内存的时间。
使用的空间非常大,大到不希望容器保持多余的内存空间。
这时就需要主动干预内存的取得和释放动作。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
有两点需要特别说明:
在添加元素时,为了减少内存分配的次数,内存空间会分段取得,所以经常会略大于数据的个数
shrink_to_fit只是发出释放内存的请求,这个请求不一定总会被响应。
“C++11如何管理容器的容量”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341