让我们说,我们知道我们将需要的向量大小,“ n”。与vector<int> Array(n);
一对一使用相比,使用Array.push_back(element)
有什么改进吗?推荐哪个,为什么?
使用
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
第一个应该比第二个更好。为什么? std::vector
是动态大小向量。这意味着,如果您想超过其限制,它将进行大小调整。调整大小是如何发生的?分配新的内存,复制everything,并删除前一个。这意味着如果容量不足,使用push_back()
可能会触发此分配。第一个从一开始就使std::vector
具有所需的容量,因此在插入元素时不需要移动。
请注意,您可以将std::vector
设置为特定容量,然后push_back()
将不进行任何其他分配,这将是非常有效的]