Rust学习_8.迭代器

迭代器

一、Iterator trait 和 next 方法

1. Iterator trait 定义:

1
2
3
4
5
6
pub trait Iterator{
type Item;//迭代器返回的类型

fn next(&mut self)->Option<Self::Item>;
// 其他由Rust给出的默认实现方法
}

例:

1
2
3
4
5
fn iterator_demo(){
let v1 = vec![1,2,3];
let mut v1_iter = v1.iter();
assert_eq!(v1_iter.next(),Some(&1));
}

调用next()方法改变了迭代器内部用来记录序列位置的状态,所以获取的迭代器v1_iter必须是可变的;

使用for循环可以不要求 v1_iter 可变,因为循环取得了 v1_iter的所有权并在内部使得它可变了。

2. 获取迭代器方法

  • iter() :获取不可变引用的迭代器(如:上例中v1.iter()获取的为v1的不可变引用,无法在遍历过程中修改v1中元素的值);
  • into_iter():获取所有权,并返回元素本身的迭代器;
  • iter_mut():获取可变引用的迭代器;

二、生成其他迭代器的方法:

迭代适配器(iterator adapter): 将已有的迭代器转换成其他不同类型的迭代器。

因为所有的迭代器都是惰性的,所以必须调用一个消耗适配器的方法,才能从迭代器适配器中获得结果。