{

Difference between iter, iter_mut, and into_iter in Rust example


Rust provides different iterators to iterate an element in a Collection.

It provides three types of methods to iterate a vector or array.

  • iter()
  • iter_mut()
  • into_iter()

The above three provide an iterator to navigate each element of a collection of objects.

Then, What is the difference between those?

Difference between iter, into_iter, and iter_mut?

  • iter() function These functions iterate elements using reference or pointer.

Let’s see an example of how to iterate a vector v

v.iter() function is equal to &v, that means iterated retrued with this function &V by convention.

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 the elements in the collections, allowing each element has a reference to mutate its value.

v.iter_mut() function is equal to mut &v, that means iterated retrued with this function &V by convention.

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 method to return an iterator, where each iterator holds element value, mutable and immutable references based on usage.

It is equal to combination of iter() and iter_mut(). It implements std::iter::IntoIterator trait

v.into_iter() returns an iterator that contains value, &v, mut &V.

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 
THE BEST NEWSLETTER ANYWHERE
Join 6,000 subscribers and get a daily digest of full stack tutorials delivered to your inbox directly.No spam ever. Unsubscribe any time.

Similar Posts
Subscribe
You'll get a notification every time a post gets published here.