reserve用于预分配内存不改变size,resize用于改变实际元素数量。① reserve(n)预分配至少容纳n个元素的内存,不创建元素,仅调整capacity,适用于提前预留空间避免频繁扩容;② resize(n)改变size,新增元素默认构造或指定值填充,若n小于当前size则销毁多余元素,适用于调整容器逻辑大小并初始化元素。两者不可互换,使用时应根据需求选择。
在使用 C++ 的 vector 容器时,内存管理是影响性能的关键因素之一。很多人对 reserve 和 resize 这两个方法的用途容易混淆,实际上它们的作用完全不同:一个是为了优化内存分配,另一个则是直接改变容器中元素的数量。
reserve(n) 的作用是提前为 vector 分配至少能容纳 n 个元素的内存空间。它不会改变 vector 的 size(),只是调整了 capacity()。这意味着你分配了更多内存,但这些内存里并没有实际的元素。
使用场景:
立即学习“C++免费学习笔记(深入)”;
示例说明:
std::vector<int> v; v.reserve(100); // capacity 至少为 100,size 仍为 0 for (int i = 0; i < 100; ++i) { v.push_back(i); // 不会触发扩容 }
如果不调用 reserve,每次 push_back 都可能触发扩容操作,导致多次内存拷贝,效率下降明显。
resize(n) 会改变 vector 中实际元素的数量。如果新的大小大于当前 size,新增的元素会被默认构造(或指定值填充);如果小于当前 size,则尾部多余的元素会被销毁。
使用场景:
立即学习“C++免费学习笔记(深入)”;
示例说明:
std::vector<int> v(5); // 初始五个元素,默认初始化为 0 v.resize(10); // 现在有10个元素,后面5个都是0 v.resize(3); // 只保留前3个元素,后面7个被销毁
需要注意的是,resize 有可能也会触发内存分配,但它更侧重于“逻辑上”的元素数量变化,而不是单纯为了性能做内存预留。
特性 | reserve | resize |
---|---|---|
改变 size 吗? | 否 | 是 |
创建元素吗? | 否 | 是 |
影响 capacity 吗? | 是 | 可能 |
主要用途 | 提高性能,避免频繁扩容 | 调整元素数量,控制容器逻辑大小 |
简单记忆口诀:
基本上就这些。这两个方法虽然功能不同,但在实际开发中经常配合使用,理解清楚它们的区别和适用场景,可以让你写出更高效、稳定的代码。
以上就是C++ vector容器如何高效管理内存 reserve和resize方法区别与使用场景的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号