有没有一种安全的方法可以将 rust 迹中的向量元素左移?(左移两位时,vec![1, 2, 3]变为vec![3]).我要处理Copy种类型,我不想支付比memmove种更高的罚款.

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

推荐答案

我会用Vec::drain.

你可以用一系列你想移除的元素来调用它,然后它会把它们移过go .示例:(playpen)

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

    v.drain(0..2);

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

另一个注意事项是:

我要处理Copy种类型,我不想支付比memmove更高的罚款.

值得注意的是,移动是always a memcpyRust ,所以Copy和非Copy的区别在这里并不重要.如果不是Copy型的话也一样.

Rust相关问答推荐

如何将元素添加到向量并返回对该元素的引用?

具有对同一类型的另一个实例的可变引用的

这种获取-释放关系是如何运作的?

无法理解铁 rust &S错误处理

制作一片连续整数的惯用Rust 方法?

对于已经被认为是未定义行为的相同数据,纯粹存在`&;[u32]`和`&;mut[u32]`吗?

在运行特定测试时,如何 suppress cargo test 的空输出?

为什么切片时需要参考?

‘&T as *const T as *mut T’ 在 ‘static mut’ 项目中合适吗?

为什么带有生命周期指定的方法不能被调用两次?

在不安全的 Rust 中存储对 struct 内部数据的静态引用是否合法?

Rust 中 Mutex<> 的深拷贝?

实现泛型的 Trait 方法中的文字

有没有办法隐式绑定 let/match 操作的成员?

为什么不能在 Rust 中声明静态或常量 std::path::Path 对象?

哪些特征通过 `Deref` 而哪些不通过?

特征中定义的类型与一般定义的类型之间的区别

返回引用字符串的future

为什么分配对变量的引用使我无法返回它

返回 &str 但不是 String 时,borrow 时间比预期长