C++ vector中capacity()和size() 的区别

文章目录

  • 1 capacity()和size() 介绍
  • 2 vector满了之后,capacity()会自动了扩充为原来的2倍 ?

1 capacity()和size() 介绍

size是指容器当前拥有元素的个数,
capacity是指容器在必须分配新的存储空间之前可以存放的元素总数。

  • vector<int> ivect,ivect.reserve(10),ivect.size()=0,ivect.capacity()=10
    • 当向ivect中插入元素时,只要没有超过10个,那么capacity就不变,而size为你插入的元素的个数。
    • 插入第10个数据时,capacity=size=10,
    • 插入第11个数据时,容器重新分配存储空间ivect.capacity()=20,而ivect.size()=11,
    • 容器重新分配空间的话是现有空间的2倍进行分配,以保证vector的效率。
int main()
{
    std::vector<int> v1;
    v1.reserve(10);//容器预留 len 个元素长度
    cout << "v1初始 size 和 capacity大小:\n " << "\tv1_size : "<<v1.size() << "\t v1_capacity: " << v1.capacity() <<endl << endl;

    // 添加元素
    cout << "v1c中插入元素后 size 和 capacity大小: " << v1.size() << endl << endl;
    for (int i = 0; i < 13; i++)
    {
        v1.push_back(i);
        cout << "\tv1_size: " << v1.size() << "\tv1_capacity: " << v1.capacity() << endl;
    }

    return 0;
}

在这里插入图片描述

从上面结果来看,
插入第11个数据时,容器重新分配存储空间ivect.size()=11,
ivect.capacity()=15并非上面所说ivect.capacity()=20

2 vector满了之后,capacity()会自动了扩充为原来的2倍 ?


为了验证函数那个扩充2倍的说法,又找了其他资料


有一种的说法:vector满了之后,会自动了扩充为原来的2倍

vector未雨绸缪机制,满了之后,会自动了扩充为原来的2倍

(提高效率,避免频繁”配置新空间-数据移动-释放旧空间”)

在这里插入图片描述

作者在qt上运行的,我在VS上运行,中止“vector迭代器不兼容”

int main() {

    vector<int> v;//最初容器没有元素,容量为空
    cout << "容量" << v.capacity() << endl;

    vector<int>::iterator it ;
    int i = 0;
    int count = 0;

    for ( i = 0; i < 1000; i++) {
        v.push_back(i);//插入第一个元素,开辟1空间;插入第二个元素,开辟2空间;插入第三个元素,开辟4空间。。。每次二倍
        if (it != v.begin()) { //如果不相等,说明又开辟了新空间,v.begin指向新空间的开头;
            count++;
            cout <<"开辟空间容量: " << v.capacity() << endl;
            it = v.begin();//it记录当前空间的开头
       }
    }
    return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/147258.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux常用命令——bzgrep命令

在线Linux命令查询工具 bzgrep 使用正则表达式搜索.bz2压缩包中文件 补充说明 bzgrep命令使用正则表达式搜索“.bz2”压缩包中文件&#xff0c;将匹配的行显示到标注输出。 语法 bzgrep(参数)参数 搜索模式&#xff1a;指定要搜索的模式&#xff1b;.bz2文件&#xff1a…

【教3妹学编程-算法题】K 个元素的最大和

3妹&#xff1a;“太阳当空照&#xff0c;花儿对我笑&#xff0c;小鸟说早早早&#xff0c;你为什么背上炸药包” 2哥 :3妹&#xff0c;什么事呀这么开发。 3妹&#xff1a;2哥你看今天的天气多好啊&#xff0c;阳光明媚、万里无云、秋高气爽&#xff0c;适合秋游。 2哥&#x…

【前端开发】JS Vue React中的通用递归函数

目录 前言 一、递归函数的由来 二、功能实现 1.后台数据 2.处理数据 3.整体代码 总结 &#x1f642;博主&#xff1a;冰海恋雨. &#x1f642;文章核心&#xff1a;【前端开发】JS Vue React中的通用递归函数 前言 大家好&#xff0c;今天和大家分享一下在前端开发中j…

基于springboot实现校园医疗保险管理系统【项目源码】

基于springboot实现校园医疗保险管理系统演示 系统开发平台 在线校园医疗保险系统中&#xff0c;Eclipse能给用户提供更多的方便&#xff0c;其特点一是方便学习&#xff0c;方便快捷&#xff1b;二是有非常大的信息储存量&#xff0c;主要功能是用在对数据库中查询和编程。其…

旺店通·企业版对接打通金蝶云星空查询调拨单接口与分布式调入单新增接口

旺店通企业版对接打通金蝶云星空查询调拨单接口与分布式调入单新增接口 源系统:旺店通企业版 旺店通是北京掌上先机网络科技有限公司旗下品牌&#xff0c;国内的零售云服务提供商&#xff0c;基于云计算SaaS服务模式&#xff0c;以体系化解决方案&#xff0c;助力零售企业数字化…

msys2 + MSVC(VS2019)编译ffmpeg6.0源码

以前使用的v1.2版&#xff0c;很多功能和使用方法发生了变化&#xff0c;需要重新编译新的ffmpeg版。 编译环境: windows 10 , VS2019, MSYS2 1. msys2 下载安装 MSYS2 , https://www.msys2.org/ 2. msys2 环境配置打开 msys2 2.1 安装相关软件 然后输入以下命令安装&…

gmpy2 GMP is_prime函数底层c代码分析

偶然看到一篇paper&#xff08;2018年发表&#xff09;&#xff0c;说GMP中的素性检测使用的是单独的Miller_Rabin方法&#xff0c;单独的Miller_Rabin素性检测会存在部分安全问题&#xff08;低概率&#xff09;&#xff0c;然后突然想求证一下最新版本的GMP中是否进行了修改。…

Python如何使用Matplotlib模块的pie()函数绘制饼形图?

Python如何使用Matplotlib模块的pie函数绘制饼形图&#xff1f; 1 模块安装2 实现思路3 pie()函数说明4 实现过程4.1 导入包4.2 定义一个类4.3 读取数据并处理4.4 定义饼图绘制方法 5 完整源码 1 模块安装 先安装matplotlib&#xff1a; pip install matplotlib安装numpy模块…

Linux Docker 图形化工具 Portainer远程访问

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 前言 Portainer 是一个轻量级的容器管理工具&#xff0c;可以通过 Web 界面对 Docker 容器进行管理和监控。它提供了可…

exsi的安装和配置

直接虚拟真实机 vcent server 管理大量的exsi SXI原生架构模式的虚拟化技术&#xff0c;是不需要宿主操作系统的&#xff0c;它自己本身就是操作系统。因此&#xff0c;装ESXI的时候就等同于装操作系统&#xff0c;直接拿iso映像(光盘)装ESXI就可以了。 VMware vCente…

在Vue.js中,什么是slot(插槽)?它的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

2.6 Windows驱动开发:使用IO与DPC定时器

本章将继续探索驱动开发中的基础部分&#xff0c;定时器在内核中同样很常用&#xff0c;在内核中定时器可以使用两种&#xff0c;即IO定时器&#xff0c;以及DPC定时器&#xff0c;一般来说IO定时器是DDK中提供的一种&#xff0c;该定时器可以为间隔为N秒做定时&#xff0c;但如…

万宾科技内涝积水监测仪效果,预警城市积水

当城市之中出现强降雨或者大暴雨&#xff0c;可能会导致雨水不断堆积到城市排水管网之中&#xff0c;可能还会淹没城市的排水系统时&#xff0c;这种现象被称为城市之中的内涝&#xff0c;并且在许多城市之中内涝问题日益引起人们的关注。 内涝积水监测仪的出现成为了希望的灯塔…

4种互斥机制比较

4种互斥机制 关中断禁止任务切换信号量互斥信号量 关中断 关中断&#xff08;Disable Interrupts&#xff09;&#xff1a;通过禁用中断来实现互斥。在关中断期间&#xff0c;任何中断请求都会被忽略&#xff0c;从而确保了临界区的独占性。然而&#xff0c;这种方法会导致系统…

【python 生成器 面试必备】yield关键字,协程必知必会系列文章--自己控制程序调度,体验做上帝的感觉 1

python生成器系列文章目录 第一章 yield — Python (Part I) 文章目录 python生成器系列文章目录前言1. Generator Function 生成器函数2.并发和并行&#xff0c;抢占式和协作式2.Let’s implement Producer/Consumer pattern using subroutine: 生成器的状态 generator’s st…

Opencv!!在树莓派上安装Opencv!

一、更新树莓派系统 sudo apt-get update sudo apt-get upgrade二、安装python-opencv sudo apt-get install libopencv-dev sudo apt-get install python3-opencv三、查看是否安装成功 按以下命令顺序执行&#xff1a; python import cv2 cv2.__version__如果出现版本号&a…

Linux文件系统之inode

文章目录 1. 磁盘1.1 认识磁盘1.2 磁盘物理构造1.3 磁盘逻辑结构 2. 文件系统3. 如何理解目录 1. 磁盘 1.1 认识磁盘 文件 内容 属性&#xff0c;而文件是存储在磁盘上&#xff0c;那么可以理解为磁盘上存储的文件 存储的文件内容 存储的文件属性。 文件的内容采用的是块式…

Android模拟器的linux内核源码的下载

文章目录 Android模拟器的linux内核源码的下载 Android模拟器的linux内核源码的下载 git clone https://aosp.tuna.tsinghua.edu.cn/android/kernel/goldfish.git自己新建一个文件夹存放内核代码&#xff0c;命名随意。 切换一下分支就有东西了 切换到下面这个分支

金蝶云星空 CommonFileServer 任意文件读取漏洞复现

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 一、漏洞概述 金蝶云星空V7.X、V8.X所有私有云和混合云版本存在一个通…

SQL 日期函数

在数据库中&#xff0c;日期和时间是经常需要处理的数据类型之一。SQL提供了许多内置的日期函数&#xff0c;用于对日期和时间进行操作、计算和比较。这些函数可以帮助我们提取日期的各个部分&#xff08;如年份、月份、日、小时、分钟等&#xff09;&#xff0c;执行日期的转换…