Remove first N elements from a std::vector
此问题讨论有关从向量中删除项目和“压缩内存”的问题。什么是“压缩记忆”,为什么在这里如此重要?
答案 0 :(得分:3)
OP正在讨论缩小向量占用的内存。当您从向量中擦除元素时,其大小会减小,但其容量(正在使用的内存)保持不变。当OP说
(还可以压缩内存)
他们希望删除元素也可以缩小向量的容量,从而减少其内存消耗。
答案 1 :(得分:3)
在std::vector
类的实现内部,有一些代码可以动态分配数据元素数组。通常并不会使用此内部数组中的所有元素-为了避免过于频繁地重新分配更大的数组,通常将数组分配为大于当前所需的数组(数组重新分配非常昂贵!)
类似地,当从std::vector
中删除项目时,内部数据数组不会立即重新分配为更小(因为这样做会很昂贵);而是,数组中现在多余的插槽保留为“空”,以期望调用代码可能希望在不久的将来重新使用它们。
但是,那些空插槽仍然占用RAM,因此,如果调用代码刚刚从向量中删除了很多项目,则可能要强制向量重新分配一个较小的内部数组,该数组不包含太多空插槽。这就是他们在该问题中所指的compacting
。
答案 2 :(得分:2)
这意味着该向量不应使用比其需要更多的内存。换句话说,OP希望:
size() == capacity()
这可以在C ++ 11和更高版本中通过在向量上调用shrink_to_fit()
来实现。虽然这只是一个请求,但没有约束力。
要确保它会压缩内存,您应该创建一个新的向量并调用reserve(oldvector.size())
。