0

0

c++中vector的reserve和resize有什么区别_c++ vector容量与大小区别解析

下次还敢

下次还敢

发布时间:2025-10-11 15:59:01

|

424人浏览过

|

来源于php中文网

原创

reserve只改变容量不改变大小,用于预分配内存提升性能;resize改变大小并可初始化元素,影响实际元素数量,二者不可混用。

c++中vector的reserve和resize有什么区别_c++ vector容量与大小区别解析

在C++中,vector 是最常用的动态数组容器之一。很多人容易混淆 reserveresize,其实它们的作用完全不同,核心区别在于:一个是控制容量(capacity),另一个是改变大小(size)。

vector的容量与大小基本概念

size(大小) 指的是 vector 当前实际存储的元素个数。
capacity(容量) 指的是 vector 在不重新分配内存的情况下最多能容纳的元素个数。

举个例子:

std::vector v;
v.push_back(1);
v.push_back(2);

此时 v.size() 是 2,而 v.capacity() 可能是 2、4 或更大,具体取决于实现和扩容策略。

reserve():只改变容量,不改变大小

reserve(n) 的作用是预分配足够容纳 n 个元素的内存空间,即把 capacity 至少设置为 n,但不会改变 size。

立即学习C++免费学习笔记(深入)”;

使用场景:当你知道将要添加很多元素时,提前调用 reserve 可以避免频繁的内存重新分配和拷贝,提升性能。

例如:

std::vector v;
v.reserve(100); // 容量变为至少100
std::cout
std::cout =100

注意:此时不能通过下标访问 v[0]v[99],因为这些位置没有实际元素。

VWO
VWO

一个A/B测试工具

下载

resize():改变大小,可能影响容量

resize(n) 会改变 vector 的 size 到 n。如果 n 大于当前 size,会在末尾添加新元素(默认用默认值初始化,如 int 为 0);如果 n 更小,则删除多余元素。

例如:

std::vector v(5); // size=5, capacity>=5
v.resize(8); // size 变为8,新增3个0;capacity 可能扩大
v.resize(3); // size 变为3,最后2个元素被删掉

关键点:resize 真正改变了元素数量,你可以安全地访问 v[0]v[size()-1]

常见误区与使用建议

• 不要用 reserve 来“准备空间”然后直接用下标赋值,这是未定义行为:

v.reserve(10);
v[0] = 1; // 错误!size 还是0,v[0] 不存在

正确做法是:

  • resize 改变大小后再用下标访问
  • 或保持 reserve + push_back/emplace_back

• 如果你只是想优化性能,用 reserve 就够了

• 如果你需要访问指定索引或初始化固定数量元素,用 resize

基本上就这些。理解清楚 size 和 capacity 的区别,就能准确使用 reserveresize,避免出错又写出高效代码。

相关专题

更多
高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

72

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

131

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

54

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

39

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

19

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

85

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

43

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

11

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

49

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 7万人学习

C 教程
C 教程

共75课时 | 4.1万人学习

C++教程
C++教程

共115课时 | 12.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号