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

在C++中,vector 是最常用的动态数组容器之一。很多人容易混淆 reserve 和 resize,其实它们的作用完全不同,核心区别在于:一个是控制容量(capacity),另一个是改变大小(size)。
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(n) 的作用是预分配足够容纳 n 个元素的内存空间,即把 capacity 至少设置为 n,但不会改变 size。
立即学习“C++免费学习笔记(深入)”;
使用场景:当你知道将要添加很多元素时,提前调用 reserve 可以避免频繁的内存重新分配和拷贝,提升性能。
例如:
std::vector<int> v;</int>v.reserve(100); // 容量变为至少100std::cout <br><code>std::cout =100
注意:此时不能通过下标访问 v[0] 到 v[99],因为这些位置没有实际元素。
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 的区别,就能准确使用 reserve 和 resize,避免出错又写出高效代码。
以上就是c++++中vector的reserve和resize有什么区别_c++ vector容量与大小区别解析的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号