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
other
alSelf
, dejandoother
vací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?