我有一个事件向量,第一个是一个更容易计算的守卫。我已经实现了一个重置操作,如下所示:
void reset()
{
myVector.resize(1);
}
这样只剩下第一个元素。此操作是否会重新分配内存?我会在一个循环中调用它,所以我希望它非常节省时间。如果确实如此,那么什么是有效的替代方案?
答案 0 :(得分:1)
分配内存的唯一函数是reserve
和插入(insert
和push_back
)。在C ++ 11中shrink_to_fit
。
答案 1 :(得分:1)
此操作是否会重新分配内存?
如果向量中没有元素,则第一次调用resize(1);
将进行分配。否则,没有。
什么是有效的替代方案?
有效的替代方案是在构造过程中为矢量分配足够的空间。那么你确定不会发生重新分配。
答案 2 :(得分:1)
如果新大小小于当前大小,std::vector::resize
不会分配内存。它只是破坏了向量中的其余元素。最坏情况下的复杂性在元素数量上是线性的。