【发布时间】:2016-07-06 15:09:16
【问题描述】:
在 Rust 中是否有一种安全的方法来左移向量的元素? (vec![1, 2, 3] 左移两位时变为vec![3])。我正在处理Copy 类型,我不想支付比memmove 更高的罚款。
我发现的唯一解决方案是不安全的:直接通过ptr::copy 使用memmove。
【问题讨论】:
在 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);
}
另一个注意事项:
我正在处理
Copy类型,我不想支付比memmove更高的罚款。
值得注意的是,在 Rust 中移动始终是memcpy,因此Copy 与非Copy 的区别在这里并不重要。如果类型不是Copy 也是一样的。
【讨论】: