news 2026/6/10 13:12:01

【std::vector】resize元素处理方式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【std::vector】resize元素处理方式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

      • 核心原理与代码验证
      • 分步解释关键问题
        • 1. `v.resize(5)` 对后5个元素的处理
        • 2. `v.resize(7)` 新增元素的值
      • 总结

你想弄清楚这段C++代码中,vector执行resize(5)后原10个元素里后5个的处理方式,以及resize(7)新增的两个元素的值,同时理解sizecapacity的变化,我会准确解答这些问题。

核心原理与代码验证

首先给出完整可运行的代码(补全头文件),并展示输出结果,再分步解释关键逻辑:

#include<iostream>#include<vector>usingnamespacestd;intmain(){vector<int>v(10,5);// 初始化:10个元素,每个值为5cout<<v.size()<<" "<<v.capacity()<<endl;for(inti:v){cout<<i<<" ";}cout<<endl;v.resize(5);// 缩小size到5cout<<v.size()<<" "<<v.capacity()<<endl;for(inti:v){cout<<i<<" ";}cout<<endl;v.resize(7);// 扩大size到7cout<<v.size()<<" "<<v.capacity()<<endl;for(inti:v){cout<<i<<" ";}cout<<endl;return0;}

输出结果

10 10 5 5 5 5 5 5 5 5 5 5 5 10 5 5 5 5 5 7 10 5 5 5 5 5 0 0

分步解释关键问题

1.v.resize(5)对后5个元素的处理

resize(n)的核心作用是调整vector有效元素个数(size),而非释放内存(capacity):

  • n < 当前size时:vector销毁索引从nsize()-1的元素(这里是索引5~9的5个元素),这些元素不再属于vector的“有效元素范围”,访问它们属于未定义行为(不能假设它们保持5或被清零)。
  • capacity保持不变(仍为10):vector为了效率,不会主动释放已分配的内存(缩容需要手动触发,比如shrink_to_fit())。
  • 最终有效元素仅保留前5个,值仍为5。
2.v.resize(7)新增元素的值

n > 当前size时:vector会在末尾新增n - 当前size个元素(这里是2个):

  • resize未指定新元素的初始值,新增元素会用元素类型的默认值初始化
    • int类型的默认值是0,因此新增的2个元素(索引5、6)的值是0,而非原来的5(原后5个元素已被销毁,内存空间虽未释放,但已不属于有效元素)。
  • capacity仍为10:新增元素未超出已分配的内存范围,无需扩容。

总结

  1. resize(5):销毁后5个元素(索引5~9),size变为5,capacity仍为10,有效元素仅前5个5。
  2. resize(7):新增2个元素,用int默认值0初始化(非原5),size变为7,capacity仍为10。
  3. vectorcapacity仅在新增元素超出当前容量时扩容,resize不会主动缩容/扩容(仅调整有效元素数)。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 12:01:20

Multisim下载前必读:版本选择与系统要求全面讲解

Multisim下载前必读&#xff1a;如何选对版本、配好电脑&#xff0c;一次安装成功&#xff1f; 你是不是也经历过这样的场景&#xff1f; 兴冲冲地打开浏览器搜索“Multisim下载”&#xff0c;点进官网准备安装&#xff0c;结果发现&#xff1a; 下下来的版本打不开、装到一半…

作者头像 李华
网站建设 2026/6/10 11:58:39

解放动画生产力!Blender骨骼重定向插件深度解析 [特殊字符]

解放动画生产力&#xff01;Blender骨骼重定向插件深度解析 &#x1f3af; 【免费下载链接】blender_BoneAnimCopy 用于在blender中桥接骨骼动画的插件 项目地址: https://gitcode.com/gh_mirrors/bl/blender_BoneAnimCopy 还在为不同角色间的动画兼容问题头疼吗&#x…

作者头像 李华
网站建设 2026/6/10 11:52:29

【std::vector】clear介绍

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录std::vector::clear() 详细说明1. 核心功能2. 对 size 和 capacity 的具体影响3. 代码示例4. 补充说明总结你想了解C标准库中std::vector的clear()成员函数的功能&am…

作者头像 李华
网站建设 2026/6/10 11:54:18

TouchGAL:如何为视觉小说爱好者打造纯净交流空间?

TouchGAL&#xff1a;如何为视觉小说爱好者打造纯净交流空间&#xff1f; 【免费下载链接】kun-touchgal-next TouchGAL是立足于分享快乐的一站式Galgame文化社区, 为Gal爱好者提供一片净土! 项目地址: https://gitcode.com/gh_mirrors/ku/kun-touchgal-next 还在为寻找…

作者头像 李华
网站建设 2026/6/10 8:16:48

FontForge免费字体设计工具完整指南:从零开始打造专业字体

FontForge免费字体设计工具完整指南&#xff1a;从零开始打造专业字体 【免费下载链接】fontforge Free (libre) font editor for Windows, Mac OS X and GNULinux 项目地址: https://gitcode.com/gh_mirrors/fo/fontforge 还在为找不到合适的字体而烦恼吗&#xff1f;想…

作者头像 李华