调用std :: vector :: clear()会将std :: vector :: capacity()设置为零吗?

mon*_*ing 45 c++ stl vector

如果我在向量上使用.reserve(items),向量将分配足够的内存来猜测我需要的项目数.

如果我以后使用.clear(),那么只清除向量还是保存我之前定义的保留?

谢谢.

sbi*_*sbi 49

指定std::vector<T>::clear()会影响大小.它可能不会影响容量.要重置容量,请使用交换技巧:

    std::vector<int> v1;

    // somehow increase capacity

    std::vector<int>().swap(v1);
Run Code Online (Sandbox Code Playgroud)

注意:由于这个旧的答案仍然是upvotes(因此人们阅读它),我觉得需要添加 C++ 11添加std::vector<...>::shrink_to_fit(),它要求向量删除未使用的容量.

  • 它_可能_影响容量。标准_不_要求避免更改容量或重新分配。因此,无论哪种方式都无法保证。 (2认同)

And*_*nck 11

它可能不会释放保留的内存,虽然我不认为行为是在标准中指定的.

编辑:好的,刚检查,标准只说后置条件是size() == 0虽然我没有遇到一个vector不保留保留内存的实现.

  • +1用于检查标准和"可能"(我通常希望保留内存).在我使用的嵌入式系统上,我实际上遇到了一个明确释放内存的实现. (6认同)

JRL*_*JRL 8

不,不会.通过电话试试吧vector::capacity().

进一步的证据是外观shrink_to_fit.标准的工作草案提到:

备注:shrink_to_fit是一个将capacity()减小为size()的非绑定请求.[注意:请求是非绑定的,以允许特定于实现的优化的纬度. - 尾注]