【发布时间】:2011-02-11 08:08:43
【问题描述】:
我想“缩小以适应”std::vector,以将其容量减少到其确切大小,从而释放额外的内存。标准技巧似乎是here 描述的技巧:
template< typename T, class Allocator >
void shrink_capacity(std::vector<T,Allocator>& v)
{
std::vector<T,Allocator>(v.begin(),v.end()).swap(v);
}
shrink-to-fit 的全部意义在于节省内存,但这种方法不是先创建一个深拷贝,然后交换实例吗?所以在某些时候——当副本被构建时——内存使用量翻了一番?
如果是这种情况,是否有更适合内存的收缩以适应的方法? (在我的情况下,向量真的很大,我不能随时在内存中同时拥有原始和副本。)
【问题讨论】:
-
不是真的,他想在交换发生的同时防止内存中两个项目的临时副本。
-
实际上,另一个问题也是如此(避免复制)。感谢您的链接。
-
双端队列能否为您提供更接近您想要的机制?在填充时,它们的开销通常比向量少,因此最终的收缩步骤并不那么重要。