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
.
也是一样的
有没有一种安全的方法可以在 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 amemmove
.
值得注意的是,在 Rust 中移动 总是 一个 memcpy
,因此 Copy
与非 Copy
的区别并不重要这里。如果类型不是 Copy
.