Module 5 • Lesson 24

Vectors: Dynamic Arrays

📚 8 min read💻 Free Course🦀 nixus.pro

Vec<T>: Dynamic Arrays

fn main() {
    // Creation
    let mut v: Vec = Vec::new();
    let v2 = vec![1, 2, 3, 4, 5];
    let v3 = vec![0i32; 10]; // ten zeros

    // Adding
    v.push(10); v.push(20); v.push(30);
    v.extend([40, 50]);
    v.insert(1, 15); // insert 15 at index 1

    // Accessing
    println!("{}", v[0]);           // panics if OOB
    println!("{:?}", v.get(100));   // None, no panic
    println!("{:?}", v.first());    // Some(&10)
    println!("{:?}", v.last());     // Some(&50)

    // Modification
    v.remove(1);         // removes at index, returns value
    v.pop();             // removes last, returns Option
    v.retain(|&x| x > 15); // keep only elements where x > 15
    println!("{:?}", v);

    // Sorting
    let mut nums = vec![3,1,4,1,5,9,2,6];
    nums.sort();
    nums.dedup();
    println!("{:?}", nums); // [1, 2, 3, 4, 5, 6, 9]

    // Iterating
    let sum: i32 = v2.iter().sum();
    let doubled: Vec = v2.iter().map(|&x| x*2).collect();
    println!("sum={} doubled={:?}", sum, doubled);

    // Flat
    let nested = vec![vec![1,2],vec![3,4]];
    let flat: Vec = nested.into_iter().flatten().collect();
    println!("{:?}", flat);
}

🎯 Practice

  1. Write fn moving_average(v: &[f64], window: usize) -> Vec<f64>
  2. Write fn merge_sorted(a: &[i32], b: &[i32]) -> Vec<i32> merging two sorted slices
  3. Use retain() to filter a Vec in place keeping only prime numbers

🎉 Key Takeaways