Rust中的向量左移元素是否有安全的方法? (左移两个地方时vec![1, 2, 3]
变为vec![3]
。我处理Copy
类型,并且我不想支付高于memmove
的罚款。
我发现的唯一解决方案是不安全的:直接通过memmove
使用ptr::copy
。
答案 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
,那就是相同的。