C++ 节省时间的标准::向量::调整大小

C++ 节省时间的标准::向量::调整大小,c++,performance,stdvector,C++,Performance,Stdvector,我有一个事件向量,第一个是为了更容易的计算。我实施了如下重置操作: void reset() { myVector.resize(1); } 这样就只剩下第一个元素了。此操作是否重新分配内存?我将在一个循环中调用它,所以我希望它非常高效。如果是这样,那么什么是有效的替代方法?分配内存的唯一功能是保留和插入(插入和推回)。在C++11中,只有保留和插入(插入和推回)是分配内存的函数。在C++11中,收缩以适应 此操作是否重新分配内存 如果向量中没有元素,则第一次调用resize(1)将进

我有一个事件向量,第一个是为了更容易的计算。我实施了如下重置操作:

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

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

分配内存的唯一功能是
保留
和插入(
插入
推回
)。在C++11中,只有
保留
和插入(
插入
推回
)是分配内存的函数。在C++11中,
收缩以适应

此操作是否重新分配内存

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

什么是有效的替代方案

有效的替代方法是在构建向量时为其分配足够的空间。那么你肯定不会再分配了

此操作是否重新分配内存

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

什么是有效的替代方案


有效的替代方法是在构建向量时为其分配足够的空间。然后确定不会发生重新分配。

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

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

但是
收缩到适应()
是一个非绑定请求,所以resize()只在请求的大小小于基础容器的大小时才会重新分配内存?而底层容器的大小永远不会减小?@Grzenio:
resize
如果请求的大小大于当前容量,则可能会重新分配内存。如果请求的大小小于当前容量,则保证不会重新分配。它的定义是,当它减小大小时,等价于
擦除
,当它增大大小时,等价于附加元素。@rhalbersma,但它可能会重新分配。@JamesKanze:读者可能不清楚“分配的函数”指的是“允许分配的函数”,而不是,“每次调用函数时都保证分配”。没有一个函数保证分配(这就是为什么在上下文中这不是你的意思),但是
shorn\u to\u fit
是一个最明显的不需要做任何事情的函数。但是
shorn\u to\u fit()
是一个非绑定请求所以resize()仅当请求的大小小于基础容器的大小时才会重新分配内存?并且基础容器的大小永远不会减小?@Grzenio:
resize
如果请求的大小大于当前容量,则可以重新分配内存。如果请求的大小小于当前容量,则保证不会重新分配容量。它的定义是,当它减小大小时,等效于
擦除
,当它增大大小时,等效于附加元素。@rhalbersma,但它可能会重新分配。@JamesKanze:读者可能不清楚“分配的函数”是指“允许分配的函数”,而不是函数保证在每次调用时分配”。没有一个函数保证分配(这就是为什么在上下文中这不是你的意思),但是
shorn\u to\u fit
是最明显的不需要做任何事情的函数。