Vectors and Vec
Level: intro (score: 1)
🚀 These intro exercises are prep for our
Rust Intro Cohort Program.
🎯 In Python, lists are dynamic arrays.
In Rust, Vec<T>
is the growable list type — but idiomatic function signatures often accept slices so they work with both Vec<T>
and arrays.
Key points for Pythonistas:
- Prefer
&[T]
for read-only access and&mut [T]
for in-place mutation. - You can pass a whole vector as a slice with
&v[..]
(read) or&mut v[..]
(write).
✅ Your task (slice-based)
Implement two functions:
-
sum_slice(v: &[i32]) -> i32
Return the sum of all elements. -
square_in_place(v: &mut [i32])
Modify the slice in-place, squaring each element.
💡 Hints
- Use
.iter()
for reading and a simplefor x in v { *x *= *x; }
for mutation. - An empty slice (summing
[]
) should yield0
.
Example tests:
let mut nums = vec![1, 2, 3];
square_in_place(&mut nums[..]);
assert_eq!(nums, vec![1, 4, 9]);
assert_eq!(sum_slice(&nums[..]), 14);
assert_eq!(sum_slice(&[]), 0);
pub fn sum_slice(v: &[i32]) -> i32 {
// TODO: Return the sum of all items in v
}
pub fn square_in_place(v: &mut [i32]) {
// TODO: Square each element of v in-place
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_sum_slice_empty() {
assert_eq!(sum_slice(&[]), 0);
}
#[test]
fn test_sum_slice_nonempty() {
let v = vec![1, 2, 3];
assert_eq!(sum_slice(&v[..]), 6);
}
#[test]
fn test_square_in_place() {
let mut nums = vec![1, 2, 3];
square_in_place(&mut nums[..]);
assert_eq!(nums, vec![1, 4, 9]);
assert_eq!(sum_slice(&nums[..]), 14);
}
}