我想知道在下面执行此操作的最有效(最快,因为向量不是那么大,我不关心内存使用情况)的方法是什么:
在不改变向量大小的情况下,移除向量的前 x 个元素,将元素的其余部分推到第一个元素,并为最后 x 个元素分配新值。我猜 vector::erase 和 ::push_back 可能不是很快,因为它两次更改了向量的大小。
还是放弃向量并使用数组更好?谢谢。
vector::erase()
不会重新分配,它只会移动已分配容量内的内容并调整大小。(请注意,编辑:这与这种情况并不真正相关。)erase()
不会抛出bad_alloc
,只有复制/移动/分配异常。
所以调用的erase()
效率应该不低于调用rotate()
。
erase()
事实上,可能更有效,因为rotate()
不仅移动在您的特定情况下您想要保留的数据,而且移动您将要丢弃的数据 - 但rotate()
也必须保留指令的语义(反过来可能需要临时存储或逐个移动)。您可以希望优化器能够解决这个问题,或者您可以调用erase()
.
当然,唯一真正的判断方法是实施、衡量和比较。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句