1. 容器大小管理操作
容器大小操作函数
c.shrink_to_fit() 请将capacity()减小为与size()相同大小
c.capacity() 不重新分配内存空间的话,c可以保存多少元素
c.reserve(n) 分配能容纳至少n个元素的内存空间

shrink_to_fit只适用于vector、string和deque;
capacity和reserve只适用于vector和string
reserve并不改变容器中元素的数量,仅影响vector预先分配多大的内存空间

  1. 一个例子
//空间增长
int main()
{vector<int> ivec;cout << "ivec:size" << ivec.size() << endl << "capaciti:" << ivec.capacity() << endl;for (vector<int>::size_type ix = 0; ix != 24; ++ix)ivec.push_back(ix);cout << "ivec:size" << ivec.size() << endl << "capaciti:" << ivec.capacity() << endl;ivec.reserve(50);cout << "ivec:size" << ivec.size() << endl << "capaciti:" << ivec.capacity() << endl;while (ivec.size() != ivec.capacity())ivec.push_back(0);cout << "ivec:size" << ivec.size() << endl << "capaciti:" << ivec.capacity() << endl;ivec.push_back(42);cout << "ivec:size" << ivec.size() << endl << "capaciti:" << ivec.capacity() << endl;ivec.shrink_to_fit();cout << "ivec:size" << ivec.size() << endl << "capaciti:" << ivec.capacity() << endl;return 0;
}

输出结果:

①可以看到当创建一个空的vector容器后,其中所含的元素和分配的内存均为0;
②当其增长24个元素后,其中所含元素数量为24,而所分配的空间为28,这是依赖于标准库的具体实现决定的;
③手动使用reserve()为其分配50的内存后,其内存变为50,元素数量没有改变;
④之后将size补满至内存空间大小,二者皆为50;
⑤再向容器中增加一个元素后,其内存空间被分配为75,增长了原内存空间的1/2,这是依赖于编译器本身的;
⑥最后应用shrink_to_fit使得内存空间减少为size的大小

了解容器大小操作后可对溢出和预分配等做进一步理解

c++:vector对象的增长相关推荐

  1. array,vector对象 数组越界检测

    array,vector对象 数组越界检测 posted on 2017-11-15 16:20 秦瑞It行程实录 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnbl ...

  2. 历史快照_实用脚本--合理估算oracle数据库及数据库对象历史增长情况

    概述 很多时候我们都需要估算oracle数据库及数据库对象历史增长情况,来评估是否需要扩容,扩多少.下面介绍一下怎么通过AWR来查找一段时间内,数据库及数据库段对象(堆表.索引)等的空间增长信息. D ...

  3. C++学习:两个vector对象拼接

    C++学习:两个vector对象拼接 方法一:insert() 函数 方法二:重载一下+号运算符 方法三:copy()函数 #include <iostream> #include < ...

  4. [C++] Vector对象的合法定义

    Vector对象的合法定义的几种情况如下: #include < vector >// 创建 vector 对象的各种方法 vector<int> veco; // 空的 ve ...

  5. oracle估算数据增长,如何估算oracle 数据库,数据库对象历史增长情况

     如何估算oracle 数据库,数据库对象历史增长情况 -----最近七天数据库的增长情况,这个只是一个估算值. select  sum(space_used_total)/1024/1024/1 ...

  6. vector 作为dll 接口参数_DLL中传递STL参数,vector对象作为dll参数传递等问题(转)...

    STL使用模板生成,当我们使用模板的时候,每一个EXE,和DLL都在编译器产生了自己的代码,导致模板所使用的静态成员不同步,所以出现数据传递的各种问题,下面是详细解释. 原因分析:一句话-----如果 ...

  7. Linux一个cpu有多少个vector,C++中vector容器大小增长规律浅析

    问:"vector大小是如何增长的?" 答:"自动增长的" 问:"增长规律是?" 答: ...... 那么, 今天就来探究一下vector容 ...

  8. sql server 监视_如何在SQL Server中监视对象空间增长

    sql server 监视 介绍 (Introduction) There are many situations in a DBA's life that lead him or her to mo ...

  9. 关于vector的容量增长问题

    "默认情况下,C++标准库提供了合理的性能".如果你对"合理的"一词暗含的意思有过好奇,请接着读下去-- 引言 假设我们希望从一个文件中将一串类型为double ...

最新文章

  1. caffe 一些网络参数
  2. Servlet与线程安全
  3. “约见”面试官系列之常见面试题之第一百零八篇之如何获取dom(建议收藏)
  4. 操作系统实验报告 lab1
  5. fortran语言能用matlab,fortran语言与matlab
  6. 奇妙的数字小明发现了一个奇妙的数字,他的平方和立方正好把0~9这10个数字每个用且只用了一次,你能猜出这个数字是多少吗
  7. 浏览器cookie数量与大小限制
  8. Android 身份证拍照 识别 文字识别 (百度)
  9. java中判断一个单词是否以a开头_查找Java中所有以'a'开头的单词
  10. Android工程师进阶第五课 多线程锁,线程池和DVM/ART优化
  11. 文字格斗游戏2.0(随机数值)
  12. 【飞鱼科技】最新社招信息
  13. b站up主是怎么赚钱,b站UP主有哪些赚钱方式,通过什么赚钱?
  14. MySQL数据库图文安装详解及相关问题
  15. 微信iPad协议-最新完整版
  16. win8 编译x265
  17. CSCD库期刊查询方法
  18. 更换故障POE交换机
  19. 云计算的业界动态:IBM的解决方案与产品概述
  20. 360°动态罗盘时钟显示HTML源码

热门文章

  1. 程序员在古代相当于什么职业?
  2. delay函数的用法及声明
  3. 关于 G1(Garbage First)垃圾收集器
  4. UE4_c++ 设置Actor BeginPlay的顺序
  5. 计算机网络的产生和发展
  6. 关于hadoop的Cannot set priority of datanode process
  7. 打开Excel的报错,提示:不能使用对象链接和嵌入
  8. 米哈游客户端笔试题_校招进米哈游客户端开发岗位需要具备哪些能力?
  9. 常遇电脑故障应急处理方法
  10. idea中项目前端网页图标不显示的原因