Bird
Raised Fist0
Rustprogramming~3 mins

Why Vector creation in Rust? - Purpose & Use Cases

Choose your learning style10 modes available
The Big Idea

What if you never had to guess how many items your list needs again?

The Scenario

Imagine you want to store a list of numbers, but you don't know how many there will be. You try to create a fixed-size array and guess the size in advance.

The Problem

This manual way is slow and frustrating because if your guess is too small, you run out of space. If it's too big, you waste memory. Also, changing the size later means rewriting your code and copying data manually.

The Solution

Vectors in Rust solve this by automatically growing as you add items. You don't need to guess the size. They handle memory safely and efficiently, so you can focus on your program's logic.

Before vs After
✗ Before
let mut numbers = [0; 5]; // fixed size array
numbers[0] = 10;
numbers[1] = 20; // what if more than 5?
✓ After
let mut numbers = Vec::new();
numbers.push(10);
numbers.push(20); // grows as needed
What It Enables

Vectors let you build flexible lists that grow and shrink easily, making your programs more powerful and easier to write.

Real Life Example

Think of a shopping list app where users add items one by one. You don't know how many items they'll add, but vectors let you store them all without limits.

Key Takeaways

Manual fixed-size arrays require guessing size and are inflexible.

Vectors automatically resize, saving time and effort.

Using vectors makes your code cleaner and more adaptable.

Practice

(1/5)
1. Which of the following correctly creates an empty vector of integers in Rust?
easy
A. let v: Vec<i32> = Vec::new();
B. let v = vec!();
C. let v = Vector::new();
D. let v = vec![0];

Solution

  1. Step 1: Understand how to create an empty vector

    In Rust, an empty vector is created using Vec::new() with the type specified if needed.
  2. Step 2: Check each option

    let v: Vec<i32> = Vec::new(); uses Vec::new() with type i32, which is correct. let v = vec!(); uses vec!() which is invalid syntax. let v = Vector::new(); uses Vector::new() which is not a Rust type. let v = vec![0]; creates a vector with one element 0, not empty.
  3. Final Answer:

    let v: Vec<i32> = Vec::new(); -> Option A
  4. Quick Check:

    Empty vector = Vec::new() [OK]
Hint: Empty vector uses Vec::new() with type [OK]
Common Mistakes:
  • Using vec!() with empty parentheses
  • Using Vector instead of Vec
  • Creating vector with one element instead of empty
2. Which syntax correctly creates a vector with the values 1, 2, and 3 in Rust?
easy
A. let v = vec{1, 2, 3};
B. let v = Vec[1, 2, 3];
C. let v = vec(1, 2, 3);
D. let v = vec![1, 2, 3];

Solution

  1. Step 1: Recall vector creation with values

    Rust uses the macro vec![...] with square brackets and exclamation mark to create vectors with initial values.
  2. Step 2: Evaluate each option

    let v = vec![1, 2, 3]; uses correct syntax vec![1, 2, 3]. let v = Vec[1, 2, 3]; uses square brackets without exclamation mark, invalid. let v = vec(1, 2, 3); uses parentheses, invalid. let v = vec{1, 2, 3}; uses curly braces, invalid.
  3. Final Answer:

    let v = vec![1, 2, 3]; -> Option D
  4. Quick Check:

    Vector with values = vec![...] [OK]
Hint: Use vec! macro with square brackets for values [OK]
Common Mistakes:
  • Missing exclamation mark after vec
  • Using parentheses or curly braces instead of brackets
  • Using Vec[...] which is invalid syntax
3. What is the output of this Rust code?
let mut v = Vec::new();
v.push(10);
v.push(20);
println!("{:?}", v);
medium
A. [10, 20]
B. [20, 10]
C. 10 20
D. Error: cannot push to vector

Solution

  1. Step 1: Understand vector push operations

    The vector starts empty. push(10) adds 10 at the end, then push(20) adds 20 after 10.
  2. Step 2: Check the printed output

    The println!("{:?}", v) prints the vector in debug format showing all elements in order: [10, 20].
  3. Final Answer:

    [10, 20] -> Option A
  4. Quick Check:

    Push adds elements in order [OK]
Hint: push adds elements at the end, print shows all [OK]
Common Mistakes:
  • Assuming push adds at the front
  • Printing vector without debug format
  • Confusing order of elements
4. Identify the error in this Rust code snippet:
let v = Vec::new();
v.push(5);
medium
A. push method does not exist for vectors
B. Vec::new() does not create a vector
C. Cannot push to an immutable vector
D. Missing semicolon after Vec::new()

Solution

  1. Step 1: Check vector mutability

    The vector v is declared without mut, so it is immutable by default.
  2. Step 2: Understand push method requirements

    The push method requires the vector to be mutable to add elements. Trying to push to an immutable vector causes a compile error.
  3. Final Answer:

    Cannot push to an immutable vector -> Option C
  4. Quick Check:

    push needs mutable vector [OK]
Hint: Add mut to vector to allow push [OK]
Common Mistakes:
  • Forgetting mut keyword
  • Thinking Vec::new() returns non-vector
  • Assuming push works on immutable vectors
5. You want to create a vector of strings from an array of &str slices and then add a new string. Which code correctly does this?
hard
A. let v = vec!["a", "b", "c"]; v.push("d");
B. let mut v: Vec<String> = ["a", "b", "c"].iter().map(|&s| s.to_string()).collect(); v.push("d".to_string());
C. let mut v = Vec::new(); v.push(["a", "b", "c"]); v.push("d");
D. let mut v = vec![String::from("a"), String::from("b"), String::from("c")]; v.push('d');

Solution

  1. Step 1: Convert &str slices to String vector

    The array of &str slices needs to be converted to a vector of String using iter(), map() with to_string(), then collect().
  2. Step 2: Add a new String element

    After creating a mutable vector, use push with "d".to_string() to add a new string.
  3. Step 3: Check other options

    let v = vec!["a", "b", "c"]; v.push("d"); tries to push to an immutable vector of &str slices, invalid. let mut v = Vec::new(); v.push(["a", "b", "c"]); v.push("d"); tries to push an array inside vector, invalid. let mut v = vec![String::from("a"), String::from("b"), String::from("c")]; v.push('d'); pushes a char instead of String, invalid.
  4. Final Answer:

    let mut v: Vec<String> = ["a", "b", "c"].iter().map(|&s| s.to_string()).collect(); v.push("d".to_string()); -> Option B
  5. Quick Check:

    Convert slices to String vector, then push String [OK]
Hint: Map &str to String, collect to Vec<String>, then push [OK]
Common Mistakes:
  • Trying to push to immutable vector
  • Pushing wrong types (char instead of String)
  • Not converting &str slices to String
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard