#### 简介

可组合的外部的迭代。

##### 组织

- 特性 - 迭代器的核心部分。定义了迭代器的种类与用法。这些特性里定义的方法是值得学习的。
- 函数 - 提供了创建基本迭代器的方法。
- 结构体 - 基本上就是特性里提供的各种方法的返回类型。你应该看的创建这些结构体的方法，而不是这些结构体本身。

##### Iterator特性

这个模块的心脏与灵魂就是`Iterator`特性。`Iterator`的核心看起来是这样的：

```rust
trait Iterator {
    type Item;
    fn next(&mut self) -> Option<Self::Item>;
}
```

迭代器的`next`方法会返回一个`Option<Item>`。当还有元素的时候，返回`Some(Item)`。当没有元素的时候，则返回`None`。

`Iterator`的其它方法都是构建于`next`之上的。

迭代器是可组合的，所以可以把它们链接起来进行更复杂的操作。

##### 迭代的三种形式

从collection创建迭代器的三种方法：

- `iter()` - 迭代的是`&T`。
- `iter_mut()` - 迭代的是`&mut T`。
- `into_iter()` - 迭代的是`T`。

##### 实现迭代器

创建一个迭代器分两步：

1. 创建一个结构体来保存迭代器的状态。
2. 为这个结构体实现迭代器。

##### for循环与IntoIterator特性

##### 适配

函数接收一个迭代器再返回一个迭代器，常被叫做“迭代器的适配”，它是“模式适配”的一种形式。

##### 惰性

##### 对引用进行迭代

##### 无限

迭代器不必是有限的。

#### 结构体

#### 特性

##### Iterator

一个处理迭代器的接口。是迭代器最主要的特性。

- 相关类型

- 依赖的方法

- 提供的方法

  ```rust
  pub fn for_each<F>(self, f: F) // 在迭代器的每个元素上调用闭包。
  ```

  

  

#### 函数