intercalar - La mejor manera de concatenar vectores en Rust
intercalar dos vectores c++ (1)
La estructura std::vec::Vec tiene método append() :
fn append(&mut self, other: &mut Vec<T>)
Mueve todos los elementos de los
otheralSelf, dejandoothervacíos.
De su ejemplo, el siguiente código concatenará dos vectores mutando a y 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, []);
}
Alternativamente, puede usar Extend::extend() para anexar todos los elementos de algo que se puede convertir en un iterador (como Vec ) a un vector dado:
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
Tenga en cuenta que el vector b se mueve en lugar de vaciarse. Si sus vectores contienen elementos que implementan Copy , puede pasar una referencia inmutable a un vector para extend() en lugar de evitar el movimiento. En ese caso el vector b no se cambia:
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]);
¿Es incluso posible concatenar vectores en Rust? Si es así, ¿hay una manera elegante de hacerlo? Tengo algo como esto:
let mut a = vec![1, 2, 3];
let b = vec![4, 5, 6];
for val in &b {
a.push(val);
}
¿Alguien sabe de una mejor manera?