Modify vector elements with Rust Closure function
Rust Closures and Higher-Order Functions: Exercise-3 with Solution
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.
It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.
https://www.w3resource.com/rust/functional-programming/rust-closures-and-higher-order-functions-exercise-3.php
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics