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

在C++中,vector 是最常用的动态数组容器之一。很多人容易混淆 reserve 和 resize,其实它们的作用完全不同,核心区别在于:一个是控制容量(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); // 容量变为至少100std::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>=5v.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 的区别,就能准确使用 reserve 和 resize,避免出错又写出高效代码。
以上就是c++++中vector的reserve和resize有什么区别_c++ vector容量与大小区别解析的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1478511.html
微信扫一扫
支付宝扫一扫