如何在Rust中左移移向量的元素?

时间:2016-07-06 15:09:16

标签: rust

Rust中的向量左移元素是否有安全的方法? (左移两个地方时vec![1, 2, 3]变为vec![3]。我处理Copy类型,并且我不想支付高于memmove的罚款。

我发现的唯一解决方案是不安全的:直接通过memmove使用ptr::copy

1 个答案:

答案 0 :(得分:11)

我会使用Vec::drain

您可以使用一系列要删除的元素来调用它,之后它会将它们移除。示例:(playpen

fn main() {
    let mut v = vec![1, 2, 3];

    v.drain(0..2);

    assert_eq!(vec![3], v);
}

另一个注意事项:

  

我正在处理Copy类型,我不想支付比memmove更高的罚款。

值得注意的是,在Rust中移动总是 memcpy,因此Copy与非Copy的区别在此无关紧要。如果类型不是Copy,那就是相同的。