首页 > 其他分享 >vector resize和reserve的区别

vector resize和reserve的区别

时间:2024-03-22 14:11:32浏览次数:27  
标签:容器 元素 vector 大小 resize reserve

在 C++ 的标准库中,resize() 和 reserve() 是用于操作 std::vector 容器的两个不同函数,它们的作用和效果有所区别。

resize() 函数

resize() 函数用于改变 std::vector 容器的大小,即调整容器中元素的数量。

  • 如果当前 vector 的大小小于指定的大小,resize() 会在容器末尾添加默认构造的元素,使得 vector 的大小达到指定大小。
  • 如果当前 vector 的大小大于指定的大小,resize() 会删除多余的元素,使得 vector 的大小等于指定大小。
std::vector<int> vec;
vec.resize(5); // 将 vec 的大小调整为 5,新增的元素值为默认值(int 类型默认为0)

reserve() 函数

reserve() 函数用于为 std::vector 容器预留存储空间,但并不改变容器中元素的数量。

  • 当使用 reserve() 后,vector 的容量会增加,但 vector 中元素的数量不变。这样可以避免因频繁添加元素而导致的重新分配内存和复制元素的开销。
  • reserve() 只是改变了 vector 内部的容量,但不改变 vector 的大小。
std::vector<int> vec;
vec.reserve(10); // 预留至少能容纳 10 个元素的存储空间,但 vector 的大小仍为 0

因此,resize() 和 reserve() 在功能上有明显区别:resize() 修改容器的大小并可能改变实际元素数量,而 reserve() 仅仅是为容器预留一定的存储空间,而不改变容器中元素的数量。根据具体需求,选择合适的函数来操作 std::vector 容器。

标签:容器,元素,vector,大小,resize,reserve
From: https://www.cnblogs.com/JasenChao/p/18089348

相关文章

  • kernel BUG at arch/x86/kernel/apic/vector.c:174!
    问题兆芯设备适配ngrayos系统(debian系统4.20.1内核)时,在网口up时系统崩溃。版本如下:现象:经过排查,原因是因为兆芯设备启动参数加了noapic(不加系统无法正常刻录和启动),网口up时中断向量不够分配。APIC(AdvancedProgrammableInterruptController)是一种硬件设备,用于处......
  • 从时间复杂度的角度出发,list和vector之间查找,插入,删除等数据操作的区别
    list和vector是STL(标准模板库)中常用的两种序列容器,它们各自在不同类型的操作上有着不同的优势。下面是list和vector在不同操作上的擅长之处:list的擅长操作插入和删除操作:list是一个双向链表,插入和删除元素时只需要调整相邻节点的指针,因此在中间或任意位置插入或删除元素时效率很......
  • 深入解析Java中的Vector集合类!
      咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及JavaSE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~......
  • vector的Erase相关
    vector<int>Vect; Vect.insert(Vect.begin()+2,50); for(autoit=Vect.begin();it!=Vect.end();++it) { if(*it==50) { Vect.erase(it); } }为什么以上的代码会报错,而下面的一段代码不会报错? vector<int>Vect;Vect.insert(Vect.begin()+2,50);......
  • STL:vector中如何使用at()来避免程序报错
     #include<iostream>#include<vector>usingnamespacestd;intmain(){ vector<int>Vec; for(inti=0;i<30;i++) { Vec.push_back(i); //cout<<Vec.size()<<endl; //cout<<Vec.capacity()<......
  • Ubuntu安装pg15和pgvector
    Ubuntu安装pg15,添加源echo"debhttp://apt.postgresql.org/pub/repos/aptfocal-pgdgmain">/etc/apt/sources.list.d/pgdg.listwget--quiet-O-https://www.postgresql.org/media/keys/ACCC4CF8.asc|sudoapt-keyadd-apt-getupdatesudoaptinsta......
  • VUE项目忽略ResizeObserver loop completed with undelivered notifications错误
    忽略"ResizeObserverlooplimitexceeded"和"ResizeObserverloopcompletedwithundeliverednotifications."两种错误。向vue.config.js中添加以下代码:module.exports=defineConfig({...devServer:{client:{overlay:{warnings:fa......
  • vector的使用
    前言前两期我们对STL和string的使用进行了介绍并对string进行了模拟实现!本期我们接着来对STL的vector进行学习!本期内容介绍什么是vector?vector常用的接口什么是vector?通过官方文档可以很清楚的看到,vector是一个可变长的顺序表!这就意味着它可以支持扩容等一系列操作!......
  • Vector Quantization
    VectorQuantizationQuantization(量化)Definition:aprocessofrepresentingalarge–possiblyinfinite–setofvalueswithamuchsmallerset.WidelyUsedinLossyCompressionRepresentcertainimagecomponentswithfewerbits(compression)Withunavoidab......
  • 发布 VectorTraits v2.0(支持 x86的Sse系列指令集等)
    目录支持x86的Sse系列指令集为Vector128/Vector256补充全部的向量方法提供CPU型号信息结果范例1:X86CPUonWindows结果范例2:ArmCPUonLinux结果范例3:ArmCPUonMacOS提供所支持的指令集信息结果范例1:X86CPUonWindows结果范例2:ArmCPUonLinux结果范例3:Arm......