C++ std::vector::resize() 方法解析(菜鸟看了秒懂)

C++基础篇 -- vector的resize函数和reserve函数 对于C++的vector容器模板类,存在size和capacity这样两个概念,可以分别通过vector的size()和capacity()方法获得该vector当前的size和capacity值。相应的,vector提供了两个方法来分别对size和capacity进行操作,它们就是resize方法和reserve方法。 首先,对于size和capacity,这是两个比较容易混淆的概念。 阅读详情
AI摘要

本文详细解析了C++中vector容器的resize()方法的语法和使用方式,包括如何调整容器大小、指定填充元素及自动重新分配存储空间等关键操作。并通过实例代码展示了不同情况下resize()方法的具体应用。

首先介绍一下resize()方法的语法解析:

语法定义:

C++ 11:

void resize (size_type n);
void resize (size_type n, const value_type& val);

C++ 98:

void resize (size_type n, value_type val = value_type());

参数:  size_type是无符号整型

语法解析:

调整容器的大小,使其包含n个元素。

  1. 如果n小于当前容器的大小,则将内容减少到其前n个元素,并删除超出范围的元素(并销毁它们)。
  2. 如果n大于当前容器的大小,则通过在末尾插入所需数量的元素来扩展内容,以达到n的大小。如果指定了val,则将新元素初始化为val的副本,否则将对它们进行值初始化。
  3. 如果n也大于当前容器容量,将自动重新分配已分配的存储空间。

请注意,此函数通过插入或擦除容器中的元素来更改容器的实际内容。

再来观察如下代码:

// resizing vector
#include <iostream>
#include <vector>

int main ()
{
  std::vector<int> myvector;

  // set some initial content:
  for (int i=1;i<=10;i++) myvector.push_back(i);
  
  std::cout << "myvector contains:";
  for (int i=0;i<myvector.size();i++)
    std::cout << ' ' << myvector[i];
  std::cout << '\n';


  myvector.resize(5);
  
  std::cout << "myvector contains:";
  for (int i=0;i<myvector.size();i++)
    std::cout << ' ' << myvector[i];
  std::cout << '\n';
  
  myvector.resize(8,100);
  
  std::cout << "myvector contains:";
  for (int i=0;i<myvector.size();i++)
    std::cout << ' ' << myvector[i];
  std::cout << '\n';
  
  
  myvector.resize(12);

  std::cout << "myvector contains:";
  for (int i=0;i<myvector.size();i++)
    std::cout << ' ' << myvector[i];
  std::cout << '\n';

  return 0;
}

运行结果:

myvector contains: 1 2 3 4 5 6 7 8 9 10
myvector contains: 1 2 3 4 5
myvector contains: 1 2 3 4 5 100 100 100
myvector contains: 1 2 3 4 5 100 100 100 0 0 0 0

显然:(白话)

  • myvector.resize(5);

将原来有10个数的vector数组,调整为5个数的长度,多余的数删掉,释放内存。  5 < 10   减小数组长度

  • myvector.resize(8,100);

将5个数长度的vector数组的长度调整为8,不够的数用100来填补,即增加了3个100。  8 > 5   增大数组长度,指定填充元素

  • myvector.resize(12);

将8个数长度的vector数组的长度调整为12,用0默认填补,即增加了4个0。   12 > 8   增大数组长度,未指定填充元素

 推荐一个在线运行C++代码的网址:

http://cpp.sh/

std::vector中reserve()和resize()的使用详解和工程实战应用示例 / 不触发构造函数// 触发5次构造场景类别使用reserve()使用resize()需要逐步 push_back✅❌(浪费初始化)要立即访问索引赋值❌✅(必须存在元素)数据量大但可重用✅(预分配避免重复 alloc)❌(重复构造开销大)每次都要重新构建元素❌(未创建元素会崩溃)✅(立刻生成默认构造元素)带有复杂构造/析构对象✅(减少构造次数)❌(每次 resize 都要构造)后续添加✅(与 clear + reserve 搭配)❌(可能多出多余元素)用途。 阅读详情

相关推荐

【19】C++实战篇—— vector中 resize()和reserve()详解 与 区别 capacity()和size()

本文介绍了C++ vector容器中size()、empty()、resize()、capacity()和reserve()等常用成员函数的功能与区别。重点分析了resize()和reserve()的实现原理和使用场景:resize()会改变容器大小并初始化新元素,而reserve()仅预留内存空间。通过实验数据展示了vector容量自动扩容机制,发现VS环境下扩容并非固定2倍增长。文章还对比了size()和capacity()的区别,size表示当前元素数量,capacity表示可容纳元素总数。通过多个代

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1583

std::vector中resize()函数踩坑

std::vector::resize()函数的一次踩坑

yuemos的博客 3335

【信息科学与工程学】【广告科学】第四十四篇 广告平台投放和广告计费类算法01

全行业的中国企业广告投放模型总表。行业分类依据《国民经济行业分类》(GB/T 4754—2017)的门类/大类 ,产品层参考"主营产品统计代码"行业—产品映射 ,平台算法以巨量引擎、腾讯广告等官方文档为硬支撑 ,合规部分严格对齐《互联网广告管理办法》以及2026年市场监管部门最新合规提示 。编号类型(门类)行业(大类)企业及产品内容列表投放模型投放平台投放人群欲望激发维度面向人群模式(地域/文化/年龄/角色)001A 农林牧渔01 农业北大荒/中粮:五常大米、面粉、食用油、杂粮品牌曝光 + 电商转化双轨(C

weixin_49199313的博客 1661

Vector的resize函数用法

---

SimpleLearning 8698

零基础也能搞定!华为USG6000V防火墙WEB管理界面开启教程

本文详细介绍了华为USG6000V防火墙WEB管理界面的开启教程,从环境准备、网络配置到防火墙初始化,逐步指导用户完成图形化管理界面的搭建。特别适合零基础用户快速掌握企业级防火墙的可视化操作,提升安全管理效率。

grape的博客 787

杭电计算机组成原理课程设计-实验七-寄存器堆设计实验

寄存器堆实验实验原理实验内容模块功能说明模块逻辑引脚图寄存器堆模块代码REG模块测试用例REG-ALU测试用例实验结果记录 寄存器堆实验结果及分析ALU_REG运算器模块实验结果及分析探索与思考 实验原理   32×32位的寄存器堆模块示意图如图所示,含有32个寄存器,每个寄存器32位。该寄存器堆具有A和B两个读端口,分别由 5 位的寄存器编号 R_Addr_A 和 R_Addr_B 来寻址 2 个寄存器,读出的数据则由 R_Data_A(32 位)和R_Data_B(32 位)输出。读访问时,没有使能或者

HDU-整蛊小子-⏰☂️/蚂蚁集团研发工程师 1万+

c++语法复习(一)

本文总结刷题中遇到的语法。

2301_80044974的博客 435

浅谈python反序列化漏洞

0x01 python序列化与反序列化 Python 的序列化和反序列化是将一个类对象向字节流转化从而进行存储和传输,然后使用的时候再将字节流转化回原始的对象的一个过程。python中的序列化操作是通过pickle模块,而该模块主要包含l dumps将dict转化为str格式,loads将str格式转化为dict格式。 dump和load与文件操作结合起来, pickle.dump(obj, f...

Lethe's Blog 3221

Vector在算法面试中的核心考点与工程实践

Vector作为C++标准模板库(STL)中的动态数组容器,其内存管理机制和迭代器特性是算法面试的高频考点。从原理上看,Vector通过连续内存空间实现O(1)随机访问,其扩容策略(如2倍或1.5倍增长)直接影响性能与内存利用率。在工程实践中,Vector的线程安全、移动语义优化和自定义分配器等技术,能够显著提升系统性能,特别是在高频交易和大数据处理场景。通过深入理解Vector的迭代器失效机制和内存管理原理,开发者可以避免常见陷阱,并优化如动态二维数组等数据结构。本文结合大厂真题,解析Vector在环形缓

weixin_30633405的博客 415

神经算子:突破科学计算瓶颈的函数空间映射技术

神经算子(Neural Operators)是深度学习在科学计算领域的重要突破,它从根本上改变了处理连续物理问题的方式。与传统神经网络学习离散数据点映射不同,神经算子学习的是函数空间到函数空间的映射,这种范式转换使其具备离散化收敛性和超分辨率预测能力。在计算流体力学、天气预报等需要求解偏微分方程的场景中,神经算子能够在保持精度的同时将计算速度提升数个数量级。傅里叶神经算子(FNO)通过快速傅里叶变换实现高效计算,特别适合规则网格问题;而图神经算子(GNO)则擅长处理不规则网格和复杂几何形状。这种技术为参数敏

cuililai5127的博客 444

R语言实战:5分钟搞定GEO单细胞数据(scRNA-seq)下载与整理(附完整代码)

本文详细介绍了如何使用R语言快速下载和整理GEO单细胞数据(scRNA-seq),提供完整的自动化处理代码。从环境准备、数据获取到文件整理和质量检查,涵盖10X Genomics标准格式及非标准数据的处理技巧,帮助生物信息学研究者高效完成数据预处理工作。

weixin_29054399的博客 608

C++ Primer 第4版习题解答与源码:从基础到实战的完整学习指南

C++作为一门经典的编程语言,其核心在于对内存管理、面向对象和泛型编程的深刻理解。学习C++通常从掌握基础语法和标准库开始,通过系统练习来巩固概念、理解底层原理。习题解答不仅是验证答案的工具,更是理解题目设计意图、培养良好编程习惯的桥梁。对于《C++ Primer》这类经典教材,一份高质量的习题解答能显著提升学习效率,帮助开发者跨越从理论到实践的鸿沟。在实际应用中,通过对比分析、调试和代码重构,可以深入理解动态内存管理、类设计、STL容器等关键概念,最终将知识融会贯通,应用于文本处理、自定义数据结构等实际项

weixin_33858485的博客 461

Plant Simulation 快速建模与布局(3)——自动生成的对象 代码“安全”删除管理

《PlantSimulation快速布局建模课程》教授利用SimTalk语言实现高效建模的技术要点,包括批量对象创建、阵列布局、属性管理及自动连接功能。重点讲解对象安全删除机制,通过existsObject检查对象存在性后使用deleteObject方法删除,避免程序报错。课程提供完整代码示例,展示如何通过循环结构实现矩阵布局对象的创建与安全删除,确保代码健壮性,显著提升建模效率。

qq_31964455的博客 119

C++实现Q学习算法:从零构建迷宫求解智能体

强化学习是机器学习的重要分支,其核心思想是智能体通过与环境交互,根据获得的奖励或惩罚来学习最优行为策略。Q学习作为经典的强化学习算法,通过构建Q表来存储状态-动作对的长期价值,并利用时序差分更新进行迭代优化。该技术价值在于无需环境模型即可实现自主学习,广泛应用于机器人导航、游戏AI和资源调度等场景。本文以迷宫求解为例,结合C++编程实践,详细解析了Q学习算法中状态抽象、奖励函数设计、探索与利用平衡等关键环节,并提供了完整的代码实现与调试技巧,帮助开发者深入理解智能体如何通过试错学习找到最优路径。

weixin_33889245的博客 444

【网络安全】AntSword蚁剑新手快速入门(附实战案例)

蚁剑(AntSword)是一款开源的跨平台WebShell管理工具,它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。蚁剑的特点主要有如下几点:1.支持多平台。包括macOS、Linux 32位、Linux 64位、Linux armv7l、Linux arm64、Windows 32位、Windows 64位。2.完善的文档。中国蚁剑文档地址。3.多项功能。文件管理功能、虚拟终端功能、数据库管理功能。4.内置代理功能。

等风来 1万+

基于MATLAB的井筒多相流模拟

井筒多相流的模拟可以基于不同的数学模型和计算方法。其中,最常用的模型之一是多相流模型,它基于质量守恒、动量守恒和能量守恒等原理,描述了流体在井筒中的流动行为。对于井筒多相流的模拟和分析可以帮助我们理解和优化油气田开发过程中的流体行为,从而提高产量和效率。在本文中,我们将介绍如何使用MATLAB进行井筒多相流的模拟,并提供相应的源代码。需要注意的是,以上示例是一个简化的模拟,仅用于演示如何使用MATLAB进行井筒多相流模拟。实际应用中,我们需要考虑更多的物理过程和参数,并使用更复杂的数值方法和模型进行模拟。

AtdiHtml的博客 706

【LINUX网络】HTTP协议基本结构、搭建自己的HTTP简单服务器

从http原理到使用C++从0手搓一个http服务框架

2301_79501467的博客 1003

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ROS1--辟机器开源之荒途

简单来说在机器人领域中不同的机器人有不同的结构,总体虽然不一样,但是采用“模块化,分布式”的思想就可以将机器人分解成通用模块(雷达、双目、相机……)所以可以理解为ROS就是机器人界的安卓;ROS中的各种节点就相当于各种手机的app,任何可以用单片机控制的模块都能用ROS来实现;1、启动终端:简单的有两种方式,第一种:在左下角的显示应用程序里直接打开终端,第二种:使用快捷键ctrl+alt+t来调出来终端。显示出来像下边图片中的窗口就恭喜你会启动linux系统的终端了!!!2、对文件进行操作:查看当前文件夹的

2502_93181420的博客 1193

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

关于vector的resize()的理解

ector的resize(),reserve()把我搞的晕头转向,老是记不住。现在把自己的一点理解记录在这里。 先看看http://www.cplusplus.com/reference/vector/vector/resize/ std::vector::resize void resize (size_type n, value_type val = value_type()); C...

phymat.nico的专栏 1万+

C++-vector容器-函数:.resize()

参考: std::vector::resize需求: 调试程序出现一个vector置0的问题,最后定位到是resize使用不当,以此记录。 通常以为打印结果为10个0, 但是实际为2.1 函数原型(C++11) 2.2 官方解释 2.3 用法说明注意,此函数通过元素来更改容器的实际内容。 2.4 实践举例借用官方的例子。 结果: myvector contains: 1 2 3 4 5 100 100 100 0 0 0 0解释:2.5 拓展项目中的真实需求是在程序开始位置,每

u013250861的博客 3307

vector中resize() 用法排坑

vector中resize() 详解,针对用法排坑,不注意易犯错!

Darchan的博客 9704

【C/C++ Vector容量调整】理解C++ Vector:Reserve与Resize的区别与应用

虽然Reserve和Resize都可以用于调整Vector的内存,但它们的功能和使用场景有所不同。Reserve是用于预分配内存,它可以提高程序的性能,但不会改变Vector的大小。而Resize是用于改变Vector的大小,它会分配或释放内存,并且会改变Vector的元素数量。 在选择使用Reserve还是Resize时,我们需要根据实际的需求来决定。如果我们只是想预分配内存,以提高程序的性能,那么应该使用Reserve。如果我们需要改变Vector的元素数量,那么应该使用Resize。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 1万+

C++中resize()使用详解

在C++中,resize() 是一个常用的成员函数,主要用于调整 std::vector 容器的大小。std::vector 是一个动态数组,允许在运行时改变其大小。resize() 提供了一种简便的方法来增加或减少 vector 的元素数量。

程序猿老樊的博客 6256

STL的vector::resize() 和 vector::reserve()区别和作用详解

一、概述 现在数组基本都用vector了,很方便,但可能对vector的某些属性还不是很了解。以前只是大概知道reserve和resize是分别干什么的,但是并不了解它们的真正目的是什么,今天仔细回顾了一下,终于弄懂了,现在做个记录。 二、区别和作用 1. resize() 设置有效空间,reserve() 设置总体容量 通俗点说,假如蔡徐坤要开演唱会,地点定在了A体育馆,这个体育馆可容纳500050005000人。在演唱会开始前卖票,发现销量不是很好,只卖出去了大概300300300张票,但为了保险起见(

McQueen_LT的博客 1467

c++ vector的resize方法

根据传入的参数,`resize` 可以增加或减少向量中的元素数量。`resize` 方法是 `std::vector` 的一个强大功能,允许开发者方便地调整向量的大小,并控制新增元素的初始化方式。- 第一次调用 `resize(5)` 将向量的大小增加到 5,新增的两个元素被默认初始化为 `0`。- 第二次调用 `resize(7, 10)` 将大小增加到 7,新增的两个元素被初始化为 `10`。3. **减少大小**:调用 `resize(3)` 将向量的大小减少到 3,超出部分的元素被删除。

HJQD777的博客 1287

[C++]std::vector中的size、capacity、resize、reserve

C++容器,std::vector中的size、capacity、resize、reserve的区别和用法。

qq_40939614的博客 2204
上一篇: vector中begin(),end()和front(),back()的区别
下一篇: mysql的coalesce使用技巧
acoolgiser
博客等级 码龄11年 179粉丝 146原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值