首页 > 后端开发 > C++ > 正文

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

下次还敢
发布: 2025-10-11 15:59:01
原创
409人浏览过
reserve只改变容量不改变大小,用于预分配内存提升性能;resize改变大小并可初始化元素,影响实际元素数量,二者不可混用。

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

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

vector的容量与大小基本概念

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

举个例子:

std::vector<int> v;</int>
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<int> v;</int>
v.reserve(100); // 容量变为至少100
std::cout <br><code>std::cout =100

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

豆绘AI
豆绘AI

豆绘AI是国内领先的AI绘图与设计平台,支持照片、设计、绘画的一键生成。

豆绘AI 485
查看详情 豆绘AI

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

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

例如:

std::vector<int> v(5); // size=5, capacity>=5</int>
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,避免出错又写出高效代码。

以上就是c++++中vector的reserve和resize有什么区别_c++ vector容量与大小区别解析的详细内容,更多请关注php中文网其它相关文章!

相关标签:
c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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