C++11如何管理容器的容量
发表于:2024-10-23 作者:千家信息网编辑
千家信息网最后更新 2024年10月23日,本篇内容介绍了"C++11如何管理容器的容量"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!capac
千家信息网最后更新 2024年10月23日C++11如何管理容器的容量
本篇内容介绍了"C++11如何管理容器的容量"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
capacity和size
理解capacity和size的区别非常重要,容器的size是指已经保存在容器中的数据的个数,而容量是指在不再重新分配内存的前提下容器最大可以包含的数据的个数。举个例子:容量为2升的瓶子装了1升水。2升是capacity,1升是size。
管理容器的容量
在绝大多数情况下,程序员不必关注容器类内存管理的细节,把这些工作完全交给C++标准库。但是有时也会有例外:
要求操作的响应非常快,快到不能忽略从堆中申请内存的时间。
使用的空间非常大,大到不希望容器保持多余的内存空间。
这时就需要主动干预内存的取得和释放动作。C++标准库为此提供了相应的成员函数。
capacity:取得容器的容量
size:取得已经保存在容器中数据的个数。
reserve:分配至少可以容纳指定数量元素的内存空间。
shrink_to_fit:释放多余的内存空间,只保留可以容纳容器中数据的最小内存。
示例代码
vector 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如何管理容器的容量"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
容器
内存
空间
容量
元素
数据
管理
个数
分配
内容
情况
更多
标准
知识
C++
实用
最小
重要
主动
为此
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技的英文翻译
易语言软件开发有限公司
Java数据库连接技术比较
nikeconnect服务器
2019网络安全监测预警能力
服务器配置pen证书
mc服务器怎么做等级系统
植物大战僵尸金何服务器
景德镇企业服务器大概费用
重庆九宫格网络技术有限公司
能源互联网恒华科技
数据库参数查询命令行
品质的数据库状态监控
有关数据库的职业规划
互联网科技标语
高中网络技术教学内容及进度
软件开发时间评估不足
广东web前端软件开发公司
单身公寓设计软件开发
服务器cpu核心数是什么意思
网络安全微课有哪些
NOLSQ数据库的名词解释
ionic与数据库的交互
财务报表数据库设计
问道服务器爆满怎么进去
架构域管理服务器
四川宜盛互联网科技有限公司
华为服务器心电图灯闪红灯
北京生产管理软件开发费用
网站设计和软件开发