C++ STD 容器:std::vector - 有没有办法清除向量并保留存储分配?

use*_*501 2 c++ stl vector

有没有办法std::vector在保留内存分配的同时清除内容?

这样做的原因是我有一段代码循环,我希望优化它。我目前将数据存储在std::vectors 中。每次循环开始时,应清除向量的内容。然后我使用push_back将数据输入到向量中,但是由于向量的长度在循环的迭代之间通常不会改变,我理想情况下希望向量将其分配的存储保留在内存中。

如果这是不可能的,vector是否可以使用另一种快速访问 STD 类型?

Sla*_*ica 7

有没有办法在保留内存分配的同时清除 std::vector 的内容?

是的,您调用std::vector::clear()方法,如文档中所述

保持向量的容量()不变

  • 哇 cppreference 链接到一个 SO 答案。真是出乎意料。 (2认同)
  • 我认为 cppreference 在这方面可能是错误的。在实践中这绝对是正确的,但我并不是说这种行为实际上是必需的。您在 cppreference 上引用的注释引用了一个 SO 答案,该答案不是很有说服力,因为它似乎假设了结论。这一切都取决于 [vector::reserve](https://timsong-cpp.github.io/cppwp/vector#capacity-7) 中的要求,但该段落的解释用于证明“容量”没有改变“清晰”似乎很脆弱。我觉得这一切有点令人惊讶。我认为该规则在标准中很明确,但事实并非如此。 (2认同)