我有一个事件向量,第一个是更容易计算的警卫。我已经执行了如下复位操作:节省时间的标准::矢量::调整大小
void reset()
{
myVector.resize(1);
}
这样只剩下第一个元素。此操作是否重新分配内存?我将循环调用它,所以我希望它非常省时。如果是这样,那么什么才是有效的替代方案?
我有一个事件向量,第一个是更容易计算的警卫。我已经执行了如下复位操作:节省时间的标准::矢量::调整大小
void reset()
{
myVector.resize(1);
}
这样只剩下第一个元素。此操作是否重新分配内存?我将循环调用它,所以我希望它非常省时。如果是这样,那么什么才是有效的替代方案?
此操作是否重新分配内存?
如果vector中没有元素,则第一次调用resize(1);
将执行分配。否则,不。
什么是一个有效的替代方案?
高效的选择是在构建过程中为矢量分配足够的空间。那么你确定没有重新分配会发生。
分配内存的唯一功能是reserve
和插入(insert
和push_back
)。和C++中的shrink_to_fit
11。
如果新尺寸小于当前尺寸,则std::vector::resize
不会分配内存。它只是摧毁矢量中的其余元素。最差情况下的复杂性与元素数量呈线性关系。
但'shrink_to_fit()'是一个非约束请求 – TemplateRex
因此,如果请求的大小小于底层容器的大小,resize()将仅重新分配内存?底层容器的尺寸从来不会缩小? – Grzenio
@Grzenio:如果请求的大小大于当前容量,'resize'可以重新分配内存。如果请求的大小小于当前容量,则保证不重新分配。当它缩小尺寸时,它被定义为等同于“擦除”,相当于在增加尺寸时追加元素。 –