文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-19 10:37

关注

本篇内容介绍了“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如何管理容器的容量”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯