有人可以解释为什么,在向量容器中,push_back操作通常较慢? 我听到有人说,但是找不到它有点慢的原因。
作为一个初学者,我想使用vector和push_back但是我还有其他选择可以获得更好的性能吗?请告诉我。谢谢,
答案 0 :(得分:1)
向量将其对象存储在连续的数组中。它分配一定量的空间( capacity )来包含对象;当对象数量( size )即将超过容量时,它会分配更大的空间并复制(或移动)现有对象。
这可能需要一些时间。为避免这种情况,并保证push_back
和insert
不需要重新分配,您可以预先致电reserve
为您的需求分配足够大的块。
答案 1 :(得分:0)
当您将某个项目追加或插入std::vector
时,可能没有足够的空间存放它。这会导致向量分配足够的存储空间来容纳所有元素并将它们复制到新的内存块中。如果按值而不是按指针存储对象,则会生成完整的副本。对于复杂类型,这可能涉及并包括额外的分配和复制。在这种情况下,性能可能会受影响,具体取决于矢量的大小。对于大型向量,性能影响将更加明显。
答案 2 :(得分:0)
push_back
操作并不总是较慢。它具有不变的复杂性(摊销时间)。唯一一次它是否较慢,是否重新分配。关于std::vector
的一个有用的事情是,无论大小如何,您始终可以向向量添加对象。让向量的容量为10,向量中有10个对象,然后重新分配以使向量变大。通常,矢量大小加倍,对象被复制到新矢量中,这是一个较慢的操作。