假设我们的std::vector<T>中存储了一百万个元素,它的容量已经满了,现在我只想在其中添加一个元素,根据向量的概念,现在vector的容量将在堆中的新内存中增加一倍,所有100万个元素将被复制到新的内存位置。这似乎是一个巨大的任务。这里有没有什么方法可以避免这种复制,只在下一个位置添加这个新元素?没什么。我想不出任何方法来避免。大多数开发人员建议我使用另一个容器。
std::vector<T>
luaexgnf1#
根据向量的概念,现在向量的容量将在堆中的新内存中增加一倍,所有100万个元素将被复制到新的内存位置。这并不完全正确。大多数std::vector的实现都有大约1.5的增长因子,而不是2.0。请参阅此问题以获取更多信息:What is the ideal growth rate for a dynamically allocated array?您可以使用std::vector::reserve控制容量及其增长。这样,您就可以避免复制容器的整个内容。
std::vector
1.5
2.0
std::vector::reserve
1条答案
按热度按时间luaexgnf1#
根据向量的概念,现在向量的容量将在堆中的新内存中增加一倍,所有100万个元素将被复制到新的内存位置。
这并不完全正确。大多数
std::vector
的实现都有大约1.5
的增长因子,而不是2.0
。请参阅此问题以获取更多信息:What is the ideal growth rate for a dynamically allocated array?
您可以使用
std::vector::reserve
控制容量及其增长。这样,您就可以避免复制容器的整个内容。