调整大小()到较小的大小会丢弃先前的reserve()所做的预留吗?

Cra*_*ray 6 c++ containers vector std

因此,如果我首先保留(100),添加一些元素,然后调整大小(0)(或小于当前大小的任何其他数字),向量是否会将内存重新分配给比100个元素少的空间?

Geo*_*sov 6

vector<T>::resize(0)不应该导致重新分配或删除已分配的内存,因此在大多数情况下更可取vector<T>::clear().

有关更多详细信息,请参阅此问题的答案:std :: vector向下调整大小

  • @NicolBolas:§23.3.6.3/ 6说(切割),"...保证在调用`reserve()`之后发生的插入过程中不会发生重新分配,直到插入的大小为止向量大于`capacity()`的值." 这意味着您必须能够调用`clear()`然后仍然可以插入,直到达到保留限制.(另外,`clear()`在§23.2.3的'generic'表100中定义为仅销毁元素,这意味着容量不变.) (5认同)
  • `clear`也不会导致重新分配,所以我不明白为什么它会更好... (4认同)