12

有没有一种安全的方法可以在 Rust 中左移向量的元素?(左移两个位置时vec![1, 2, 3]变为)。vec![3]我正在处理Copy类型,我不想支付比使用memmove.

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

4

1 回答 1

15

我会用Vec::drain.

您可以使用一系列要删除的元素来调用它,然后它会转移它们。示例:(游戏围栏

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

    v.drain(0..2);

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

另一个注意事项:

我正在处理Copy类型,我不想支付比使用memmove.

值得注意的是,在 Rust 中移动始终是一个memcpy,所以Copyvs 非Copy区别在这里并不重要。如果类型不是,那将是相同的Copy

于 2016-07-06T15:15:43.827 回答