在推回之前,我将容量缩减为零,然后将项目推回向量,它将重新分配吗?
是重新分配意味着性能降低?
如果是这样,为什么需要将容量减少到零或适合大小?

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


仅当您知道不希望向该向量添加任何其他元素时,才这样做,以确保您的向量不会消耗比您实际需要的更多的内存。

10-08 08:57