从 Vec 中删除一定范围内的元素

8
我有一个包含100个元素的Rust中的Vec,我需要删除索引在10到30之间的每个元素。一种方法是逐个删除每个元素,如下所示:
for i in 10..30 {
    vec.remove(i);
}

但这会导致每次删除元素时,剩余的Vec必须向左移动,因此会有一次memcpy。 我如何一次性从Vec中删除一整个范围的项目,以一种只引起一次memcpy的方式?

1个回答

23

如何一次性从Vec中删除一整个范围的元素?

使用Vec::drain

vec.drain(10..30);

您可以使用 drain() 的返回值来迭代已删除的元素,但如果您忽略它,那么它就等价于范围删除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接