Vec (Vectores)
Vec es el búfer estándar redimensionable asignado al heap:
fn main() { let mut v1 = Vec::new(); v1.push(42); println!("v1: longitud= {}, capacidad = {}", v1.len(), v1.capacity()); let mut v2 = Vec::with_capacity(v1.len() + 1); v2.extend(v1.iter()); v2.push(9999); println!("v2: longitud= {}, capacidad = {}", v2.len(), v2.capacity()); // Macro canónica para inicializar un vector con elementos. let mut v3 = vec![0, 0, 1, 2, 3, 4]; // Conserva solo los elementos pares. v3.retain(|x| x % 2 == 0); println!("{v3:?}"); // Elimina los duplicados consecutivos. v3.dedup(); println!("{v3:?}"); }
Vec implementa Deref<Target = [T]>, lo que significa que puedes llamar a métodos slice en un Vec.
This slide should take about 5 minutes.
Veces un tipo de colección, junto conStringyHashMap. Los datos que contiene se almacenan en el heap. Esto significa que no es necesario conocer el tamaño de los datos durante la compilación. Puede aumentar o disminuir durante la ejecución.- Ten en cuenta que
Vec<T>también es un tipo genérico, pero no tienes que especificarTde forma explícita. Como siempre sucede con la inferencia de tipos de Rust,Tse estableció durante la primera llamada apush. vec![...]es una macro canónica para usarla en lugar deVec::new()y admite que se añadan elementos iniciales al vector.- Para indexar el vector, se utiliza
[], pero entrará en pánico si se sale de los límites. También se puede usargetpara obtener unaOption. La funciónpopeliminará el último elemento. - Se estudiarán los slices el tercer día del curso. Por ahora, los participantes solo necesitan saber que un valor del tipo
Vectambién da acceso a todos los métodos de slice documentados.