具有大元素的向量

Vvj*_*Vvj 0 c++ containers memory-management stl vector

假设我们的 中存储了 100 万个元素std::vector<T>,它的容量已满。现在我只想在其中添加 1 个元素。根据向量的概念,现在向量的容量将在堆中的新内存中增加一倍,并且所有 100 万个元素将被复制到新的内存位置。这似乎是一项艰巨的任务。有什么方法可以避免这种复制并仅在下一个位置添加这个新元素吗?

没有什么。我想不出有什么方法可以避免。大多数开发人员建议我使用另一个容器。

And*_*zel 5

根据向量的概念,现在向量的容量将在堆中的新内存中增加一倍,并且所有 100 万个元素将被复制到新的内存位置。

这不太正确。大多数实现的std::vector增长因子约为 ,1.5而不是2.0。请参阅此问题以获取更多信息:

动态分配数组的理想增长率是多少?

您可以使用 来控制容量及其增长std::vector::reserve。这样,您就可以避免复制容器的整个内容。