vector扩容

2023-10-31

扩容原理

  • vector以连续的数组存放数据,当vector空间已满时会申请新的空间并将原容器中的内容拷贝到新空间中,并销毁原容器
  • 存储空间的重新分配会导致迭代器失效
  • 因为分配空间后需要进行拷贝,编译器会预分配更多空间以减少发生拷贝影响程序效率
  • 扩容的大小叫做扩容因子,扩容因子由编译器决定,VS的扩容因子为1.5,G++中,扩容因子为2
	vector<int> v = { 1,2,3,4,5,6 };
	cout << v.capacity()<<' ';
	v.push_back(7);
	cout << v.capacity();

vs中,扩容后容器大小为原来的1.5倍
在这里插入图片描述
g++中,扩容后容器大小为原来的2倍
在这里插入图片描述

不同扩容因子的比较

  • 扩容因子大,每次需要分配的新内存空间越多,分配空间耗时。空闲空间较多,内存利用率低。
  • 扩容因子小,需要再分配的可能性更高,扩容耗时。空闲空间较少,内存利用率较。

一般认为扩容因子1.5优于2.0,原因是以1.5作为扩容因子可以实现复用释放的内存空间。

以2为扩容因子时,分配空间为

0 1 2 4 8 16...

每次分配新空间时所需空间与释放的空闲空间

分配空间 空闲空间
1 0
2 1
4 1+2=3
8 3+4=7
16 7+8=15

空闲的空间始终要小于需要分配的空间

以1.5为扩容因子时,分配空间为

0 1 2 3 4 6 9...
分配空间 空闲空间
1 0
2 1
3 1+2=3
4 3+3=6
6 6+4=10
9 10+6=16

随着分配空间增大,之前释放的空闲空间能够满足当次扩容所需的空间,实现内存的复用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vector扩容 的相关文章

  • Postsharp 不登录跟踪级别

    我喜欢在跟踪级别记录一些 Postsharp 消息 不幸的是 日志到这个级别没有打印任何输出 所有其他级别都在工作 与控制台或 NLog 后端或从其他类登录时的行为相同 如何启用跟踪级别 应用程序 xaml cs Log Attribute
  • 错误:“运行所选代码生成器时出错:包恢复失败”

    我正在尝试将控制器添加到 ASP NET Core 项目中的解决方案中 当我尝试这样做时 我收到此错误 我收到相同的消息 为控制器添加最小依赖项和完整依赖项 我也有这个问题 使用实体框架添加控制器 gt 带有操作的 API 控制器 将给出
  • 提取单花括号内的值

    我想要一个收藏 value 一个字符串使用正则表达式 例如 lorem ipsum field1 lorem ipsum field2 lorem ipsum field1 lorem ipsum field2 field3 我会得到 fi
  • C 中的 '\0' 和 printf()

    在 C 入门课程中 我了解到在存储字符串时存储空字符 0在它的最后 但是如果我想打印一个字符串怎么办 printf hello 虽然我发现它并没有结束 0通过以下声明 printf d printf hello Output 5 但这似乎不
  • 如何在Unity Inspector中创建多维数组?

    如何在 Unity Inspector 中创建枚举多维数组并使其可序列化 以便我可以从不同的脚本调用它 public enum colors red blue green yellow cyan white purple public in
  • _MM_TRANSPOSE4_PS 在 GCC 中导致编译器错误?

    我第一次在 GCC 而不是 MSVC 中编译我的数学库 并经历了所有的小错误 我遇到了一个根本没有意义的错误 Line 284 error lvalue required as left operand of assignment 284号
  • 将旧的 Unity 代码升级到 Unity 5

    在触发按钮上播放动画的代码似乎不起作用 我在 Youtube 上看到了一个视频 内容很简单animation Play 它可以在该视频上运行 但我无法让它在我的计算机上运行 我做错了什么还是团结改变了它 请帮助我在网上找不到解决方案 所有
  • “DeploymentItem”属性是什么意思?

    假设我们有一个简短的程序 namespace ConsoleTryIt static class Program static void Main string args var sum Add 1 2 private static int
  • WCF 服务中的缓冲区大小

    我们有一个 WCF 服务 它执行某些存储过程并将结果返回给 silverlight 客户端 某些存储过程最多返回 80K 行 下面给出的是 web config 中服务的设置
  • 当一对迭代器初始化时,向量是否知道先保留?

    考虑以下代码 struct MyData MyData const BYTE pData size t uSize bucket pData pData uSize std vector
  • 我的代码哪里有泄漏?

    下面是我的代码 它打开一个 XML 文件 old xml 过滤无效字符并写入另一个 XML 文件 abc xml 最后 我将再次加载 XML abc xml 当执行以下行时 出现异常 表示 xml 文件被另一个进程使用 xDoc Load
  • 使用“const cv::Mat &”、“cv::Mat &”、“cv::Mat”或“const cv::Mat”作为函数参数的区别?

    我已经彻底搜索过 但没有找到一个简单的答案 传递 opencv 矩阵 cv Mat 作为函数的参数 我们传递一个智能指针 我们对函数内部的输入矩阵所做的任何更改也会改变函数范围之外的矩阵 我读到 通过将矩阵作为 const 引用传递 它不会
  • 快速将文本附加到文本框

    我有一个BackgroundWorker正在发布消息的线程 使用BeginInvoke在 GUI 中的文本框中 方法 write debug text 在文本框中显示文本使用AppendText并将文本写入Console 外观上是这样的Ba
  • C中使用JNI从对象获取对象

    public class Student private People people private Result result private int amount 这是 Java 中类的示例 在C中 我试图获取 学生 中的 人 但失败了
  • 从数据库配置中的连接字符串中删除 SSIS 密码

    我有一个 SSIS 包 它使用 SQL 服务器中的 SSIS 配置表来检索 OLE DB 连接管理器的连接字符串属性 问题是我还需要相同的连接字符串来调用使用实体框架的程序集 我尝试访问连接管理器连接字符串属性 但 SSIS 总是删除密码
  • 打印任何类型的数组和列表的通用方法[重复]

    这个问题在这里已经有答案了 每当我调试一段涉及整数 双精度 字符串等数组或列表的代码时 有时我更喜欢打印它们 我为此所做的是为不同类型编写重载的 printArray printList 方法 for e g 我可能有这 3 种方法来打印各
  • 如何从 C# 中的 Web Api 方法正确获取字节数组?

    我有以下控制器方法 HttpPost Route SomeRoute public byte MyMethod FromBody string ID byte mybytearray db getmybytearray ID working
  • 如何使用实体框架设置连接字符串

    我将 EF6 与 MySQL 结合使用 并有一个用于多个数据库的模型 我希望能够在我的表单中设置连接设置 如何以编程方式设置模型的连接字符串 你应该使用EntityConnectionFactory这就是您所需要的 public strin
  • DbContext.SaveChangesAsync 异常处理

    当搭建新的脚手架时ApiController通过 Visual Studio 2013 中的异步操作和实体框架支持 某些方法可以包装DbContext SaveChangesAsync https msdn microsoft com en
  • 从 C/C++ 程序进行 Ping

    我想编写一个 C 或 C 程序 给定一个 IP 地址 对其进行 Ping 然后根据 Ping 是否成功执行进一步的操作 这个怎么做 尽情享受Ping 页面 http www ping127001 com pingpage htm 其中有一个

随机推荐

  • 蓝桥杯每日一题(18):李白打酒(python)

    Topic 话说大诗人李白 一生好饮 幸好他从不开车 一天 他提着酒壶 从家里出来 酒壶中有酒2斗 他边走边唱 无事街上走 提壶去打酒 逢店加一倍 遇花喝一斗 这一路上 他一共遇到店5次 遇到花10次 已知最后一次遇到的是花 他正好把酒喝光
  • ecshop中ajax的调用原理 1

    ecshop中ajax的调用原理 1 首先ecshop是如何定义ajax对象的 ecshop中的ajax对象是在js transport js文件中定义的 里面是ajax对象文件 声明了一个var Ajax Transport 对象和一个方
  • 大坝安全监测有哪些监测项目

    大坝安全监测有 工程主体结构 地基基础 两岸边坡 相关设施以及周围环境所作的测量及观察 也包括对建筑物外表及内部大范围对象的定期或不定期的直观检查和仪器探查 通过观测仪器和设备 以及时取得反映大坝和基岩性态变化以及环境对大坝作用的各种数据的
  • centos6.5搭建贴吧云签到平台(多图预警)

    前提 我已经用oneinstack服务搭建好了主机环境LNAMP Linux NginxApache Mysql php 默认目录是 data wwwroot default 详细步骤 1 先下载要安装的文件 我用的是GitHub上star
  • 虚拟机vmware安装win10提示operating system not found解决办法

    首先如果启动提示进入BIOS 则删除下述文件的efi 首先先设置启动PE镜像 加载启动盘PE ISO后进入PE 将系统镜像复制到U盘 PE里先分区 然后再安装 PE里安装完后重启 后面的步骤按自动的即可
  • postman循坏调用接口

    postman循坏调用接口 新建一个Collections 在新建的Collections里面新建需要循环的接口 将需要循坏变化的参数设置成变量 设置好变量之后 运行整个collections 变量值的数量应该与迭代次数一致 可以导入jso
  • YOLOv5+单目测距(python)

    YOLOv5 单目测距 python 1 相关配置 2 测距原理 3 相机标定 3 1 标定方法1 3 2 标定方法2 4 相机测距 4 1 测距添加 4 2 细节修改 可忽略 4 3 主代码 5 实验效果 相关链接 1 YOLOV7 单目
  • python ttk Treeview的插入、清空、各种点击事件、获取条目值、标题单击排序

    昨天整了一天Tkinter的treeview 发现中文的教程乃至提问都很少 其中两个问题的解决都是靠steakoverflow上找到的 在这里放出来我遇到并解决的问题 大家以后可能遇到的话就能省点事了 插入方法 import tkinter
  • 第二章-Kali安装

    目录 2 Kali Linux安装 硬盘安装 虚拟机安装 01硬盘安装 02DOCKER 03虚拟机安装 3 Kali Linux 安装 持久加密USB安装 熟悉环境 熟悉BASH命令 01 持久加密USB安装 1 02 持久加密USB安装
  • 专注于开源技术的研究与应用由Tencent://Message协议想到的一个解决方案

    源代码下载 http files cnblogs com phinecos HelloWorldProtocal rar 前天在BruceZhang 的一篇博文 求助 如何在ASP页面中调用Winform程序呢 中回答了他提出的问题 但细想
  • jsp调用证书类ocx控件问题

    1 先注册ocx 本次使用的方式是先将我调用的两个控件打包成 CAB文件 然后做成一个exe让用户去下载注册 2 jsp页面上使用 进行调用 ps clsid可以在注册表中找到 id是自己定义的 因为控件在第一步已经注册到注册表里 code
  • 重学Elasticsearch7(来源官方文档)

    一 开篇总览 1 bulk操作最好请求体数据大小在5m 15m 2 由于要给文件系统缓存留下足够空间 es的jvm堆大小不要超过服务器可用内存空间的一半 二 聚合 1 在聚合时 missing字段可以给没有该字段的文档以默认值 2 带权重的
  • html登录页面整理

    img src data image png base64 iVBORw0KGgoAAAANSUhEUgAAAycAAAJGCAYAAABBdvriAAAgAElEQVR4Aey9W5okN5KsWUz2qmaxs7zzNEvoSo78Ii
  • java自动化测试语言高级之Java 9 新特性

    java自动化测试语言高级之Java 9 新特性 文章目录 java自动化测试语言高级之Java 9 新特性 Java 9 新特性 Java 9 新特性 Java 9 发布于 2017 年 9 月 22 日 带来了很多新特性 其中最主要的变
  • 内嵌模式搭建Hive

    在此之前已经搭建好了一个三台机器的hadoop集群 https blog csdn net QYHuiiQ article details 123055389 spm 1001 2014 3001 5501 接下来在此基础上搭建hive 下
  • (C++)GDAL学习笔记——1 均值滤波和中值滤波

    就要开始研究生生活了 这个暑假要学一下GDAL相关的知识 这里将中间完成的一些东西Mark下来 方便自己以后回顾 任务 利用Vc 编写一个3 3的均值滤波或中值滤波程序 代码 注 此次试验用到的影像为波段数为1的tif格式影像 主函数 in
  • 2022 年 MathorCup 高校数学建模挑战赛——大数据竞赛赛道 赛道 B:北京移动用户体验影响因素研究

    问题 1 根据附件 1 和附件 2 分别研究影响客户语音业务和上网业务 满意度的主要因素 并给出各因素对客户打分影响程度的量化分析和结果 附件 1 2 中各字段的解释说明见附件 5 问题一本质就是特征筛选问题 而且要给出各特征影响程度的量化
  • node实现发送邮件和上传文件功能

    文章目录 node实现发送邮件带附件 node 是什么 下载 文件结构 index html文件 nodemails js文件 node实现发送邮件带附件 记录下我前不久刚刚接触过的node用来实现发送邮件和上传文件图片功能 希望能帮到和我
  • L2-021 点赞狂魔分数

    微博上有个 点赞 功能 你可以为你喜欢的博文点个赞表示支持 每篇博文都有一些刻画其特性的标签 而你点赞的博文的类型 也间接刻画了你的特性 然而有这么一种人 他们会通过给自己看到的一切内容点赞来狂刷存在感 这种人就被称为 点赞狂魔 他们点赞的
  • vector扩容

    扩容原理 vector以连续的数组存放数据 当vector空间已满时会申请新的空间并将原容器中的内容拷贝到新空间中 并销毁原容器 存储空间的重新分配会导致迭代器失效 因为分配空间后需要进行拷贝 编译器会预分配更多空间以减少发生拷贝影响程序效