fn vec_loop(input: &[i32]) -> Vec<i32> { let mut output = Vec::new(); for element in input { output.push(2 * element); } output } fn vec_map_example(input: &[i32]) -> Vec<i32> { // An example of collecting a vector after mapping. // We map each element of the `input` slice to its value plus 1. // If the input is `[1, 2, 3]`, the output is `[2, 3, 4]`. input.iter().map(|element| element + 1).collect() } fn vec_map(input: &[i32]) -> Vec<i32> { // We will dive deeper into iterators, but for now, this is all what you // had to do! // Advanced note: This method is more efficient because it automatically // preallocates enough capacity. This can be done manually in `vec_loop` // using `Vec::with_capacity(input.len())` instead of `Vec::new()`. input.iter().map(|element| 2 * element).collect() } fn main() { // You can optionally experiment here. } #[cfg(test)] mod tests { use super::*; #[test] fn test_vec_loop() { let input = [2, 4, 6, 8, 10]; let ans = vec_loop(&input); assert_eq!(ans, [4, 8, 12, 16, 20]); } #[test] fn test_vec_map_example() { let input = [1, 2, 3]; let ans = vec_map_example(&input); assert_eq!(ans, [2, 3, 4]); } #[test] fn test_vec_map() { let input = [2, 4, 6, 8, 10]; let ans = vec_map(&input); assert_eq!(ans, [4, 8, 12, 16, 20]); } }