1 迭代器```rust
pub trait Iterator {
type Item;
fn next(&mut self) -> Option
- 通过`Iterator`来对集合类型进行迭代。- `next()`方法结合了`has_next()`和`get_next()`<br /><a name="jVraS"></a># 2 三种迭代器rust中的集合类型通常通过结构体实现了三种不同类型的迭代器:- `IntoIter` 这种使用IntoIter结构体实现的迭代器,通过调用要求所有权的into_iter()方法生成,迭代器的`next()`方法返回`Option<T>`- `IterMut` 这种使用IterMut结构体实现的迭代器,通过调用要求独占引用的iter_mut()方法生成,迭代器的`next()`方法返回`Option<&mut T>`- `Iter` 这种使用Iter结构体实现的迭代器,通过调用要求共享引用的iter()方法生成,迭代器的`next()`方法返回`Option<&T>`<a name="bgmfV"></a># 3 实现IntoIter- 不断调用`pop()`方法就可以实现一个简单的迭代器```rust// 元组结构体是结构体的一种替代形式,常用于包装其他类型pub struct IntoIter<T>(List<T>);impl<T> List<T> {pub fn into_iter(self) -> IntoIter<T> {IntoIter(self)}}impl<T> Iterator for IntoIter<T> {type Item = T;fn next(&mut self) -> Option<Self::Item> {// 通过数值下标访问元组结构体包装的内容self.0.pop()}}
测试代码
#[test]fn into_iter() {let mut list = List::new();list.push(1); list.push(2); list.push(3);let mut iter = list.into_iter();assert_eq!(iter.next(), Some(3));assert_eq!(iter.next(), Some(2));assert_eq!(iter.next(), Some(1));assert_eq!(iter.next(), None);}
