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

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],因为这些位置没有实际元素。

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,避免出错又写出高效代码。

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1478511.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 02:59:28
下一篇 2025年12月19日 02:59:38

相关推荐

发表回复

登录后才能评论
关注微信