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

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

如果我以后使用.clear(),那么只是清除vector或保存我之前定义的储备?

谢谢。

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

  std::vector<int> v1; // somehow increase capacity std::vector<int>().swap(v1); 

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

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

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

不,不会的。 尝试通过调用vector::capacity()

进一步的证据是shrink_to_fit的出现。 标准的工作草案提到:

备注:shrink_to_fit是一个非约束请求,用于将capacity()减小到size()。 [注意: 该请求不具有约束力,可以实现特定于实现的优化 。 – 注意]

不,它不会将reserve()设置为0.调用clear()调用每个元素的析构函数,并将其从vector中移除,留下大小为0的容器,但容量保持不变。

它不会影响底层的缓冲区大小。 这就是为什么你必须使用这样的技巧来实际摆脱缓冲区或使其变小。