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