STL中容器的几个容易混淆的成员函数-size, capacity, resize, reserve

C++中size()与length()函数深度解析:从STL容器到字符串处理 在C++编程中,容器和字符串操作是基础且高频的技术点。理解STL(标准模板库)的设计哲学,掌握其提供的统一接口,是编写高效、健壮代码的关键。容器通过`size()`函数提供了一种泛型编程的通用标尺,它返回无符号整数类型`size_t`,用于获取元素数量,这一设计支撑了迭代器和算法库的协同工作。而字符串作为特殊序列,除了`size()`外还提供了`length()`函数,两者在功能上完全一致,但`length()`更符合“字符串长度”的语义直觉,体现了接口设计中对历史习惯和代码可读性的考量。在实际工程中,正确 阅读详情


 1. container::size()

用于表示容器中有几个元素,用n来表示, 并不能表示容器现有的内存最多能存多少个元素。

 

2. container::capacity()

用于表示容器现有的内存最多能够存放多少个元素, 用m来表示。 如果想要计算容器现有的内存还能够存放几个元素 = capacity() - size();

 

3. container::resize(size_t n1)

用于改变n,用于改变容器中现有的元素个数。当调用resize(n1)之后,那么size()函数返回的就是n1。

如果n1 < n, 那么容器中后面的n-n1个元素会被析构掉。

如果n1> n, 那么在容器的后面会插入新n1-n个元素,调用的都是新的元素的默认构造函数(这说明作为容器元素的默认构造函数的重要性)。

如果n1 > m, 那么这个时候会调用rellocate函数来为容器分配n1-m个元素的内存空间,同时调用默认构造函数,这时,也会修改m的值。

 

4. container::reserve(size_t m1)

用于改变m的值,用于改变容器在现有内存下所能存储的元素的个数。 当调用reserver(m1)之后,那么capacity()函数放回的就是m1.

如果m1 < m, 那么容器会忽略掉这个调用,如果想要释放掉不用的内存,那么可以使用swap技巧来实现。

如果m1 > m,   那么容器会调用rellcate函数为容器增加新的内存空间,但是不会调用默认构造函数。


C++ vector中resize与reserve区别:内存管理与性能优化详解 在C++标准模板库(STL)中,容器是管理数据集合的核心组件,其中vector作为动态数组的实现,其内存管理机制直接影响程序性能与稳定性。理解vector内部的大小(size)与容量(capacity)概念是关键:size表示当前有效元素数量,capacity则代表底层预分配的内存空间上限。当元素数量增长超过capacity时,vector会触发昂贵的重新分配(reallocation)操作,涉及新内存分配、元素搬移与旧内存释放,导致性能下降且使所有迭代器失效。reserve()函数正是为解决此问题而生,它 阅读详情

相关推荐

基于python的奥运会历史数据分析【120年】

数据分析实战案例

xff123456_的博客 3339

【大爱】C++STL 常用 函数 用法

  学完c++快一年了,感觉很有遗憾,因为一直没有感觉到c++的强大之处,当时最大的感觉就是这个东西的输入输出比C语言要简单好写。   后来我发现了qt,opencv,opengl,原来,c++好玩的狠。   在这些图形库之外,最常用的可能就是STL,这个东西由于当时学c++的时候迷迷糊糊,完全是一头雾水,上学期数据结构之后开始有点儿开窍了,现在把才c++STL中常用的函数,用法贴一下,也是记...

weixin_30640769的博客 902

通俗讲解清楚光线追踪中的蒙特卡洛积分

彻底讲解光线追踪中的蒙特卡洛积分

qq_37366618的博客 1243

C++ vector中的resize,reserve,size和capacity函数讲解

前言 在介绍resize(),reserve(),size()和capacity()函数之前,先简单介绍一下c++中vector的概念。 vector:顺序容器(可变大小数组)。支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢。 既然vector是个容器,那么一定相关特性,如添加元素、删除元素和查询容器大小等操作。本文重点介绍vector中的resize(),reserve(),si...

阿木寺的博客 5万+

如何使你的直流电机闭环?(PID讲解)

看了看很多大佬写的PID讲解很全面也很复杂,实在是不适合很多萌新入坑,所以想按自己的理解写一篇通俗易懂的PID算法讲解

a2001444的博客 1万+

射频电路设计——射频器件基础

本文仅供自己复习使用,请勿转载! 射频电路制作方法 MCM工艺 CMOS工艺 趋肤效应、深度 频率越高趋肤效应越明显 高频器件 高频电阻 绕线的比贴片的多一个电感,是因为绕线的因为是线绕制的,只有有线就会有电感,所以绕线电阻等效模型会比贴片的多一个电感 多晶硅电阻模型 深线性区MOS电阻 高频电阻的频率响应 记忆的话就后面的频率特性有点像电容的 高频电容 作用 单层贴片式电容 多层贴片式电容 MIM电容 MOM电容 由于是并联的,所以总的电容值是单个的直接相加 PN结电容 M.

输出每日所学,供大家学习使用 7153

【C++String类成员函数辨析】resize(),size(),capacity(),reserve()函数的解析与对比

朋友们好,这篇播客我们继续C++的初阶学习,现在对我们对C++的string类中的几个内存空间函数做出总结对比,整理出来一篇博客供我们一起复习和学习,如果文章中有理解不当的地方,还希望朋友们在评论区指出,我们相互学习,共同进步!这几个函数相对来说还是很好理解,我们就不对其再做具体介绍,看一段代码即懂! ⚠️代码示例: ⭐️:结果输出 代码解释:size和length函数的功能都是计算字符串大小,capacity函数计算为字符串分配的内存空间。尽管我们调用clear()函数清空了字符串内容,但是其容量依然不变

qq_43727529的博客 3340

手把手教你用二茂铁催化剂搞定醇的动力学拆分(保姆级实验避坑指南)

本文详细介绍了使用平面手性二茂铁催化剂进行醇的动力学拆分的全流程,包括催化剂选择与制备、反应体系搭建与条件优化、实时监测与反应淬灭、产物分离与纯化等关键步骤。通过实战案例和避坑指南,帮助实验人员实现>98% ee的拆分效果,特别适合需要高光学纯度二级芳基醇或烯丙醇的研究者。

weixin_30500105的博客 437

C++ capacity()用法总结

容器的size是指它已经保存的元素的数目;而capacity则是在不分配新的内存空间的前提下它最多可以保存多少元素。capacity(),size(),reserve(),resize()这几个都是不太容易区分的函数当我们创建空容器时,容量(capacity)为0;容器的内存空间用完时,增加为原容量的1/2;上述机制适用于,如vector ,而list则不同。capacity 一般大于size的原因是为了避免每次增加数据时都要重新分配内存,所以一般会生成一个较大的空间,以便随后的数据插入。

gyqJulius_Caesar的博客 759

【即插即用模块】注意力篇 | MICCAI 2023 | MFE:多尺度特征提取,告别固定感受野,猛涨2个点!

本文提出一种用于低分辨率乳腺癌病理图像超分辨率与分类的网络SHISRCNet。针对现有方法处理低分辨率图像效果差、感受野固定等问题,设计了多特征提取模块(MFE),通过多速率空洞卷积覆盖全尺度感受野(局部到全局),结合递进残差连接和动态权重融合机制,实现自适应多尺度特征增强。实验表明,该模块在超分辨率任务中PSNR提升近2个点,分类准确率显著提高。代码提供详细注释,支持即插即用,适用于各类多尺度视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 207

【系统架构设计师-2026上半年真题】综合知识-参考答案及详解(75题完全回忆版)

【系统架构设计师-2026上半年真题】综合知识-参考答案及详解(75题完全回忆版)

数据知道的博客 3108

stl reserve和resize区别

首先我们看下size和capacity的区别 size是当前vector容器真实占用的大小,也就是容器当前拥有多少个元素。 capacity是指在发送realloc前 允许的最大元素数,即预分配的内存空间。 注:在STL中,拥有capacity属性的容器只有vector和string 这两个属性分别对应两个方法:resize()和reserve() a.reserve是容器预留空间,

patkritLee的博客 757

YOLOv8改进 | 独家创新篇 | 给YOLOv8增加辅助可逆分支结构(PGI,1:1改进)(全网独家创新,附视频讲解)

这张图(图3)展示了可编程梯度信息(PGI)及其相关网络架构和方法。这种网络结构主要用于改进特征融合,以提高目标检测的性能。然而,由于信息瓶颈的存在,网络中可能会丢失一些信息。这是一种旨在减少信息丢失的网络设计。它通过可逆的列结构来尝试维持信息流通不受损失,但如图中“Heavy Cost”所示,这种结构会增加计算成本。c) 深度监督:这种方法通过在网络的多个层次中插入额外的监督信号来提高学习的效率和最终模型的性能。图中显示了通过深度监督连接的各个层。

Snu77的博客 3745

vector的resize函数和reserve函数

博客原文:https://blog.youkuaiyun.com/vampirem_chosen_one/article/details/50519870?utm_source=copy,写的特别好,谢谢原博主。 正文: 对于C++的vector容器模板类,存在size和capacity这样两个概念,可以分别通过vector的size()和capacity()方法获得该vector当前的size和capa...

qq_36812406的博客 4929

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

STL专家经验分享:3分钟搞懂reserve与resize的本质区别

快速掌握C++ STL vector reserve 与 resize 区别,避免性能陷阱。详解两者在容量预分配与元素数量调整中的不同应用场景,揭示内存管理机制与效率优化关键。理解resize初始化元素、reserve仅扩容的特性,提升程序性能,值得收藏。

ProceNest的博客 497

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

STL方法中,resize()和reserve()的区别和用途

之前对二者用法总是混淆,所以花时间仔细研究了一下,并在vs2013下测试了一些简单的vector的例子,总结如下: resize():改变当前容器内含有元素的数量(size()),eg: vectorv; v.resize(len);v的size变为len,如果原来v的size小于len,那么容器新增(len-size)个元素,元素的值为默认为0.当v.push_back(3);之后,则是3是放

ZiZhanOld的博客 5923

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

[转载] C++ STL之 vector的capacity和size属性区别

参考链接: C++ Vector中capacity与size vector中这两个属性很容易弄混淆。 size是当前vector容器真实占用的大小,也就是容器当前拥有多少个容器。 capacity是指在发生realloc前能允许的最大元素数,即预分配的内存空间。 当然,这两个属性分别对应两个方法:resize()和reserve()。 使用resize(),容器内的对象内存空间是真正存在的。 使用reserve()仅仅只是修改了capacity的值,容器内的对象并没有真...

u013946150的博客 202

使用reserve来避免不必要的内存重新分配

stl容器reserve方法介绍

小罗的博客 2481

C++新手避坑指南:正确区分vector的reserve和resize功能

掌握C++ STL vector reserve 与 resize 区别,避免性能陷阱。详解两者在容量预分配与元素数量调整中的不同应用场景,揭示内存管理机制与使用要点。合理运用可提升程序效率,避免频繁扩容。新手必读,值得收藏。

CodePulse的博客 549

C++ vector中resize与reserve函数:核心区别、性能优化与实战应用

在C++标准模板库(STL)中,内存管理是影响程序性能的关键因素之一。容器作为数据存储的核心组件,其动态内存分配策略直接决定了程序的运行效率。vector作为最常用的序列式容器,通过连续内存块存储元素,提供了随机访问的高效性,但其动态扩容机制若使用不当,会引发频繁的内存重分配与元素拷贝,导致显著的性能开销。理解容量(capacity)与大小(size)的差异是优化内存使用的基石:容量是物理上已分配的内存空间,大小是逻辑上存在的元素数量。reserve()函数专注于性能优化,它预先分配足够的物理内存以避免后续

weixin_31364787的博客 291

【C++】 STL之 vector的capacity和size属性区别

vector的capacity和size属性区别 vector中这两个属性很容易弄混淆。 size是当前vector容器真实占用的大小,也就是容器当前拥有多少个容器。 capacity是指在发生realloc前能允许的最大元素数,即预分配的内存空间。 当然,这两个属性分别对应两个方法:resize()和reserve()。 使用resize(),容器内的对象内存空间是真正存在的。 使用...

mjiansun的专栏 1609

(转)C++ STL之 vector的capacity和size属性区别

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 ...

qq_41615583的博客 271

[C++STL]vector底层原理全解析:从数组到动态扩容、迭代器失效、resize/reserve 不再踩坑

这一篇文章带大家以重新发明vector的方式,深入浅出的讲解了vector的底层原理,也是帮助初学者避开一些常见的坑点,理清一些容易混淆的概念。光说不练假把式,我们留一道课后思考题,涉及了本文提到的一些函数,做完了把答案发到评论区://初始化size=5,capacity=5已知扩容增长因子为2,求当前数组的size(),capacity(),和数组存储的所有值。

2202_76049826的博客 220

Vector的resize()函数与reserve()

resize()函数与reserve()函数是两个极易引起混淆的函数,下面将详细的区分一下两者的不同: resize()函数:更改容器中的元素数量。 如: #include&amp;lt;iostream&amp;gt; #include&amp;lt;vector&amp;gt; using namespace std; int main() { int len=10; vector&amp;lt;int&amp;gt;v; v.pus...

lovehang99的博客 1022
上一篇: C++ 之“友元类”学习笔记
下一篇: 玩转ptrace(一)
小文兄弟
博客等级 码龄17年 28粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值