节省时间的std :: vector :: resize

时间:2013-02-06 11:30:09

标签: c++ performance stdvector

我有一个事件向量,第一个是一个更容易计算的守卫。我已经实现了一个重置​​操作,如下所示:

void reset()
{
    myVector.resize(1);
}

这样只剩下第一个元素。此操作是否会重新分配内存?我会在一个循环中调用它,所以我希望它非常节省时间。如果确实如此,那么什么是有效的替代方案?

3 个答案:

答案 0 :(得分:1)

分配内存的唯一函数是reserve和插入(insertpush_back)。在C ++ 11中shrink_to_fit

答案 1 :(得分:1)

  

此操作是否会重新分配内存?

如果向量中没有元素,则第一次调用resize(1);将进行分配。否则,没有。

  

什么是有效的替代方案?

有效的替代方案是在构造过程中为矢量分配足够的空间。那么你确定不会发生重新分配。

答案 2 :(得分:1)

如果新大小小于当前大小,std::vector::resize不会分配内存。它只是破坏了向量中的其余元素。最坏情况下的复杂性在元素数量上是线性的。