为什么使用std::vector::reserve很有用? 在C++中,可以通过使用PurthyBead方法将元素添加到向量中。此方法修改向量的大小。 那么使用std::vector::reserve的目标是什么?我应该在什么时候使用它?

为什么使用std::vector::reserve很有用? 在C++中,可以通过使用PurthyBead方法将元素添加到向量中。此方法修改向量的大小。 那么使用std::vector::reserve的目标是什么?我应该在什么时候使用它?,c++,vector,C++,Vector,调整向量大小可以显著降低执行速度(例如,在向其添加大量数据时) 参考资料说: This effectively increases the container size by one, which causes an automatic reallocation of the allocated storage space if -and only if- the new vector size surpasses the current vector capacity. 因此,它有助于将向量

调整向量大小可以显著降低执行速度(例如,在向其添加大量数据时)

参考资料说:

This effectively increases the container size by one, which causes an automatic
reallocation of the allocated storage space if -and only if- the new vector size
surpasses the current vector capacity.

因此,它有助于将向量的大小设置为一个值,理想情况下,该值足以容纳所有数据,而不剩下任何数据。减少向量的调整大小时间将加快应用程序的速度

调整向量大小可以显著降低执行速度(例如,在向其添加大量数据时)

参考资料说:

This effectively increases the container size by one, which causes an automatic
reallocation of the allocated storage space if -and only if- the new vector size
surpasses the current vector capacity.

因此,它有助于将向量的大小设置为一个值,理想情况下,该值足以容纳所有数据,而不剩下任何数据。向量大小调整时间的减少将加快应用程序的速度

当您知道向量中至少有n个元素时,您可以使用reserve。调整容器的大小是一项代价高昂的操作——分配新内存,将旧内容复制到其中,然后删除旧向量。如果您知道默认情况下将获得至少10000个元素,那么最好为向量保留大小,而不是让向量重新分配内存超过必要的次数


简单地说,就是效率

当知道向量中至少有n个元素时,使用reserve。调整容器的大小是一项代价高昂的操作——分配新内存,将旧内容复制到其中,然后删除旧向量。如果您知道默认情况下将获得至少10000个元素,那么最好为向量保留大小,而不是让向量重新分配内存超过必要的次数


简单地说,就是效率

这是出于效率的考虑-如果您知道这一点,您可以根据需要为任意多的元素分配内存-这样,向量就可以一次分配所有元素,并且如果超过分配的大小,就不必增长

[4] Reserve()导致手动重新分配。主要原因是 使用reserve()是效率:如果您知道您的 向量最终必须增长,然后它通常更有效地 一次分配所有内存,而不是依赖自动 再分配计划。使用reserve()的另一个原因是 您可以控制迭代器的失效


这是出于效率的考虑-如果您从一开始就知道,您可以根据需要为尽可能多的元素分配内存-这样,向量可以一次分配所有元素,并且如果超过分配的大小,就不必增长

[4] Reserve()导致手动重新分配。主要原因是 使用reserve()是效率:如果您知道您的 向量最终必须增长,然后它通常更有效地 一次分配所有内存,而不是依赖自动 再分配计划。使用reserve()的另一个原因是 您可以控制迭代器的失效


它可用于确保迭代器的有效性,或作为优化。向向量添加元素时,如果新大小大于容量,向量必须重新分配、复制(或移动)所有现有元素到新缓冲区。这会使向量中的所有迭代器无效,并且可能会很昂贵。备用功能确保最小容量。如果预先知道最大大小,并对其进行保留,则添加元素不会使新元素前面的迭代器失效,也不会需要复制。(对于大多数代码来说,迭代器的有效性问题迫使使用reserve。)

它可以用来确保迭代器的有效性,或者作为一种优化。向向量添加元素时,如果新大小大于容量,向量必须重新分配、复制(或移动)所有现有元素到新缓冲区。这会使向量中的所有迭代器无效,并且可能会很昂贵。备用功能确保最小容量。如果预先知道最大大小,并对其进行保留,则添加元素不会使新元素前面的迭代器失效,也不会需要复制。(对于大多数代码来说,迭代器的有效性问题迫使使用reserve。)

这是为了最小化或彻底消除缓冲区大小调整和引入的命中(复制/移动可能会变得昂贵,特别是对于大量对象)。在
操作员新建/删除
范围中没有
realloc
等效项。要“扩展”一个分配,需要一个单独的分配,大量复制或移动,然后释放旧内存。通过“宣布”你对数量的意图,你可以避免这种细微差别。一只卑鄙的兔子很可爱。一百万只普通兔子是一个非常大的问题)。这是为了最大限度地减少或彻底消除缓冲区大小调整以及由此带来的影响(复制/移动可能会很昂贵,尤其是对于大量对象)。在
操作员新建/删除
范围中没有
realloc
等效项。要“扩展”一个分配,需要一个单独的分配,大量复制或移动,然后释放旧内存。通过“宣布”你对数量的意图,你可以避免这种细微差别。一只卑鄙的兔子很可爱。一百万只兔子是一个非常严重的问题)。比效率更重要的是:它保证迭代器保持有效。比效率更重要的是:它保证迭代器保持有效。因此,作为最佳实践,人们应该总是调用reserve来避免这些副作用?+1应该注意的是,即使有充足的保留缓冲区,一个
insert(v.begin()…)
,迭代器的有效性也会分崩离析。他们都把它放在下巴上,即使没有X也不一定。很多时候,例如,你在做
push_back