C++ 删除前 x 个元素的有效方法,将第 x+1 个元素推到第一个而不改变向量大小

菜鸟

我想知道在下面执行此操作的最有效(最快,因为向量不是那么大,我不关心内存使用情况)的方法是什么:

在不改变向量大小的情况下,移除向量的前 x 个元素,将元素的其余部分推到第一个元素,并为最后 x 个元素分配新值。我猜 vector::erase 和 ::push_back 可能不是很快,因为它两次更改了向量的大小。

还是放弃向量并使用数组更好?谢谢。

杰里米

vector::erase()不会重新分配,它只会移动已分配容量内的内容并调整大小。请注意,erase()不会抛出bad_alloc,只有复制/移动/分配异常。编辑:这与这种情况并不真正相关。)

所以调用的erase()效率应该不低于调用rotate()

erase()事实上,可能更有效,因为rotate()不仅移动在您的特定情况下您想要保留的数据,而且移动您将要丢弃的数据 - 但rotate()也必须保留指令的语义(反过来可能需要临时存储或逐个移动)。您可以希望优化器能够解决这个问题,或者您可以调用erase().

当然,唯一真正的判断方法是实施、衡量和比较。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

删除向量的第一个元素并将其大小减少 1

当第二个元素是X时,C ++ Map获得第一个元素

c ++ 98,向量,删除除第一个元素之外的所有元素

之后获得类X的第一个元素

如何仅从第一个元素的kendo-multiselect下拉菜单中删除关闭(x)按钮

查找最小索引的最有效方法,其值减去前一个索引的值小于给定的x?

从大向量中删除第一个元素的最有效方法是什么?

数值表达式有 x 个元素:仅第一个使用

如何删除List <Double>中的前X个条目

矩阵N x N x 3,获取内部3数组的第一个元素

如果前一个元素是 x,则返回它

Python MatplotLib绘制x轴,第一个x轴值标记为1(而不是0)

是否总是将'array = X'分配给bash中的第一个元素?

如何删除Firefox地址栏中的第一个“访问网站X”选项?

Pandas DataFrame 删除重复项,保留第一个“x”次出现

第一个C#实际项目(HRESULT的异常:0x80070002)

从列表中随机删除“ x”个元素

确定在排序序列中是否存在两个整数 X 和 Y 使得 X XNOR Y = -1 的最有效方法是什么?

删除X个对象后有效地重新排列List <Object>

如果字符串少于 x 个字符,从字符串中删除最后一个单词的最有效计算方法是什么?

Haskell:在元组列表中查找第一个元素为x的元组

获取值大于x的数组中第一个元素的索引

查找向量中第一个值大于X的位置

在单元格 B(x) 中找到一个值并替换 C(x) 中的值。偏移 1

Javascript从X元素中添加/删除类但1

为什么第一个字节打印为(b'c \ x ..)而不是(b'x63 \ x ..)?

删除列表中前N个元素的最有效方法?

第一个Python列表索引大于x?

jQuery第一个对象,其中x = true