Difference between iter, iter_mut, and into_iter in Rust example
Rust provides various iterators for traversing elements within a collection.
It offers three types of methods for iterating through a vector or array.
- iter()
- iter_mut()
- into_iter() Each of these methods provides an iterator to traverse each element of a collection.
So, what are the differences between them?
Difference between iter, into_iter, and iter_mut?
iter() function
These functions iterate elements using references or pointers.Let’s see an example of how to iterate through a vector v.
The
v.iter()
function is equivalent to&v
, meaning it returns an iterator using references conventionally.Here is an example.
fn main() { let v = vec![0, 1, 2, 3]; // v.iter example for item in &v { print!("{} ", item); } for item in v.iter() { print!("{} ", item); } }
Output:
0 1 2 3 0 1 2 3
iter_mut() function
These functions iterate through the elements in the collections, allowing each element to have a reference to mutate its value.
The
v.iter_mut()
function is equivalent to mut&v
, meaning it returns an iterator using mutable references conventionally.Here is an example.
fn main() { // v.iter_mut() function example let mut v1 = vec![0, 1, 2, 3]; for item in &mut v1 { *item *= 2; println!("{} ", item); } for item in v1.iter_mut() { *item *= 2; println!("{} ", item); } }
Output:
0 2 4 6 0 4 8 12
into_iter() function
It is a generic function to return an iterator, where each iterator holds element values, mutable and immutable references based on usage.
It is equal to a combination of iter()
and iter_mut()
. It implements the std::iter::IntoIterator trait
.
v.into_iter()
returns an iterator that contains values, &v
,mut &V
.
Here is an example.
fn main() {
let v = vec![0, 1, 2, 3];
let mut v1 = vec![0, 1, 2, 3];
// v.iter example
for item in &v {
print!("{} ", item);
}
for item in v.into_iter() {
print!("{} ", item);
}
}
Output:
0 1 2 3 0 1 2 3