结构std::vec::Vec
有方法append() https://doc.rust-lang.org/std/vec/struct.Vec.html#method.append:
fn append(&mut self, other: &mut Vec<T>)
移动所有元素other
into Self
,离开other
empty.
在您的示例中,以下代码将通过以下方式连接两个向量mutating a
and b
:
fn main() {
let mut a = vec![1, 2, 3];
let mut b = vec![4, 5, 6];
a.append(&mut b);
assert_eq!(a, [1, 2, 3, 4, 5, 6]);
assert_eq!(b, []);
}
或者,您可以使用Extend::extend() https://doc.rust-lang.org/std/iter/trait.Extend.html#tymethod.extend附加可以变成迭代器的所有元素(例如Vec
) 到给定向量:
let mut a = vec![1, 2, 3];
let b = vec![4, 5, 6];
a.extend(b);
assert_eq!(a, [1, 2, 3, 4, 5, 6]);
// b is moved and can't be used anymore
注意向量b
被移动而不是被清空。如果您的向量包含实现的元素Copy https://doc.rust-lang.org/stable/std/marker/trait.Copy.html,您可以将对一个向量的不可变引用传递给extend()
而是为了避免移动。在这种情况下向量b
没有改变:
let mut a = vec![1, 2, 3];
let b = vec![4, 5, 6];
a.extend(&b);
assert_eq!(a, [1, 2, 3, 4, 5, 6]);
assert_eq!(b, [4, 5, 6]);