0

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

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

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

4

3 回答 3

1

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

于 2013-02-06T11:39:16.820 回答
1

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

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

什么是有效的替代方案?

有效的替代方法是在构造过程中为向量分配足够的空间。然后你确定不会发生重新分配。

于 2013-02-06T11:44:31.240 回答
1

如果新大小小于当前大小,std::vector::resize则不分配内存。它只是破坏向量中的剩余元素。最坏情况下的复杂性与元素数量呈线性关系。

于 2013-02-06T11:49:18.143 回答