与C ++中使用push_back相比,声明一个带有矢量的向量提供了任何改进

问题描述 投票:0回答:2

让我们说,我们知道我们将需要的向量大小,“ n”。与vector<int> Array(n);一对一使用相比,使用Array.push_back(element)有什么改进吗?推荐哪个,为什么?

c++ vector stl dynamic-memory-allocation
2个回答
2
投票

使用

vector<int> Array(n);

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

例如使用时

Array.push_back(value);

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


代替创建具有固定大小的数组,您可以替代地预分配(或reserve)内存:

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

0
投票

第一个应该比第二个更好。为什么? std::vector是动态大小向量。这意味着,如果您想超过其限制,它将进行大小调整。调整大小是如何发生的?分配新的内存,复制everything,并删除前一个。这意味着如果容量不足,使用push_back()可能会触发此分配。第一个从一开始就使std::vector具有所需的容量,因此在插入元素时不需要移动。

请注意,您可以将std::vector设置为特定容量,然后push_back()将不进行任何其他分配,这将是非常有效的]

© www.soinside.com 2019 - 2024. All rights reserved.