在推回之前,我将容量缩减为零,然后将项目推回向量,它将重新分配吗?
是重新分配意味着性能降低?
如果是这样,为什么需要将容量减少到零或适合大小?
vector<int> mandy2(5);
vector<int>().swap(mandy2);
printf("mandy2 size: %d\n", mandy2.size());
printf("mandy2 capacity: %d\n", mandy2.capacity());
mandy2.push_back(1);
mandy2.push_back(2);
mandy2.push_back(6);
最佳答案
在推回之前,我将容量缩减为零,然后将项目推回向量,它将重新分配吗?
是的,它会的。
引用doccumentation:void push_back ( const T& x );
在向量的最后一个元素之后的向量的末尾添加一个新元素。这个新元素的内容被初始化为x的副本。
这将使向量大小有效地增加一个,如果向量大小等于调用前的向量容量,则会导致内部分配存储区的重新分配。重新分配会使所有先前获得的迭代器,引用和指针无效。
reallocate
是否意味着性能降低?
从理论上讲,是的!
只有在对代码进行性能分析后才能确定地说出它对您的伤害。
如果是这样,为什么需要将capacity
缩小为零或适合size
?
仅当您知道不希望向该向量添加任何其他元素时,才这样做,以确保您的向量不会消耗比您实际需要的更多的内存。