2013-02-06 33 views
0

我有一个事件向量,第一个是更容易计算的警卫。我已经执行了如下复位操作:节省时间的标准::矢量::调整大小

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

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

回答

1

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

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

什么是一个有效的替代方案?

高效的选择是在构建过程中为矢量分配足够的空间。那么你确定没有重新分配会发生。

1

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

+1

但'shrink_to_fit()'是一个非约束请求 – TemplateRex

+0

因此,如果请求的大小小于底层容器的大小,resize()将仅重新分配内存?底层容器的尺寸从来不会缩小? – Grzenio

+0

@Grzenio:如果请求的大小大于当前容量,'resize'可以重新分配内存。如果请求的大小小于当前容量,则保证不重新分配。当它缩小尺寸时,它被定义为等同于“擦除”,相当于在增加尺寸时追加元素。 –

1

如果新尺寸小于当前尺寸,则std::vector::resize不会分配内存。它只是摧毁矢量中的其余元素。最差情况下的复杂性与元素数量呈线性关系。