首页 > 解决方案 > 与在 C++ 中使用 push_back 相比,声明具有大小的向量是否提供任何改进

问题描述

假设我们知道我们将需要的向量的大小(比如“n”)。

使用是否比逐个使用vector<int> Array(n);提供任何改进?Array.push_back(element)

推荐哪个,为什么?

标签: c++vectorstldynamic-memory-allocation

解决方案


vector<int> Array(n);

您创建一个包含n元素的向量,这些元素所需的所有内存都会立即分配。

当你使用例如

Array.push_back(value);

然后需要调整向量的大小,这可能意味着必须重新分配内存并且必须将所有内容复制到新内存中。


您可以预先分配(或保留)内存,而不是创建具有设定大小的数组:

vector<int> Array;  // An empty vector
Array.reserve(n);   // Reserve memory, but keep the size as zero (it's still empty)
Array.push_back(value);  // No reallocation needed, size is now one

当您有一个无法默认构造的对象向量时,这很有用。

需要学习的重要概念:向量大小及其容量以及它们之间的区别。

容量是向量已为其分配内存的元素数。

大小是向量中的当前元素数。

容量与大小不同是很常见的。并且它必须始终是真实的capacity >= size


推荐阅读