Modify vector elements with Rust Closure function
Write a Rust function that iterates over a vector of integers and applies a closure to each element, modifying the original vector.
Sample Solution:
Rust Code:
fn apply_closure_to_vector<F>(vector: &mut Vec<i32>, mut closure: F)
where
F: FnMut(&mut i32), // Define the closure trait bound
{
for num in vector.iter_mut() { // Iterate over each element in the vector
closure(num); // Apply the closure to the current element
}
}
fn main() {
let mut numbers = vec![100, 200, 300, 400, 500]; // Define a vector of integers
println!("Original vector: {:?}", numbers); // Print the original vector
// Define a mutable closure that adds one to each element
let mut add_one = |x: &mut i32| *x += 1;
// Apply the closure to each element of the vector
apply_closure_to_vector(&mut numbers, &mut add_one);
// Print the modified vector
println!("Modified vector: {:?}", numbers);
}
Output:
Original vector: [100, 200, 300, 400, 500] Modified vector: [101, 201, 301, 401, 501]
Explanation:
In the exercise above,
- The "apply_closure_to_vector()" function:
- This function takes two parameters: a mutable reference to a vector of integers (vector: &mut Vec<i32>) and a mutable closure (closure: F) where 'F' is a generic type that represents any closure that takes a mutable reference to an 'i32'.
- Inside the function, it iterates over each element of the vector using "iter_mut()", which allows mutable access to each element.
- For each element, it applies the closure "closure" by invoking it with the current element as an argument (closure(num)).
- The main function:
- It initializes a vector of integers "numbers" with values [100, 200, 300, 400, 500].
- It defines a closure "add_one" using the |parameter| { body } syntax. This closure takes a mutable reference to an 'i32' and increments the value by 1 (*x += 1).
- It calls the "apply_closure_to_vector()" function with a mutable reference to 'numbers' and the closure "add_one".
- After applying the closure to each element of the vector, it prints the modified vector.
Rust Code Editor:
Previous: Applying Closure to two numbers in Rust.
Next: With Rust Higher-Order Filter integers function.
What is the difficulty level of this exercise?
Test your Programming skills with w3resource's quiz.
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics