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

How are elements of a vector left-shifted in Rust?

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

更高的罚款

我找到的唯一解决方案是不安全的:通过 ptr::copy.

直接使用 memmove

我会用 Vec::drain.

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

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

    v.drain(0..2);

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

另一个注意事项:

I'm dealing with Copy types, and I don't want to pay a penalty higher than what I would with a memmove.

值得注意的是,在 Rust 中移动 总是 一个 memcpy,因此 Copy 与非 Copy 的区别并不重要这里。如果类型不是 Copy.

也是一样的