与在 C++ 中使用 push_back 相比,声明具有大小的向量是否有任何改进

Ayu*_*ush 2 c++ stl vector dynamic-memory-allocation

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

使用是否vector<int> Array(n);Array.push_back(element)一一使用有任何改进?

推荐哪个,为什么?

Som*_*ude 6

vector<int> Array(n);
Run Code Online (Sandbox Code Playgroud)

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

当你使用例如

Array.push_back(value);
Run Code Online (Sandbox Code Playgroud)

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


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

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
Run Code Online (Sandbox Code Playgroud)

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

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

容量是向量分配了存储器的元件的数量。

大小是在该载体元件的当前数目。

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