std :: vector resize(0)或clear() - 但保持它的容量

ben*_*ist 7 c++ vector c++11

我正在将许多对象合并到包含渲染数据(网格)的单个向量中.这个向量被清除并重新填充每个帧(好吧,差不多).

问题是,在我的情况下,清除然后再次保留向量大小会对性能产生巨大影响,因为clear()也可能会改变容量.

换句话说,我需要控制向量的容量何时发生变化.我想保留旧容量很长一段时间,直到我决定自己是时候改变它了.

我看到两个选择:

  • 弄清楚如何控制std :: vector的容量何时即将发生变化
  • 为大内存对象实现一个内存池,它将获取<=所需大小的大型数据对象,并根据需要重用/释放它

更新

另外,如果调用调整大小(10),然后调用调整大小(5)(仅用于说明,将实际数字乘以数百万),该怎么办?

稍后调用resize(5)会导致向量重新分配吗?

Oli*_*liv 10

实际上,clear成员函数保持向量容量不变.它只会破坏(调用析构函数)每个向量元素并将向量大小设置为0.

在这种情况下,在每次迭代时,我会调用clear()以销毁所有向量元素,然后调用成员函数reserve(size),在向量容量太小的情况下,将至少将其增加size.