Iterator 与 IntoIterator

Iterator trait 与 IntoIterator trait 是 Rust 实现迭代器的基础.

Iterator trait 的定义比较复杂, 有70多个方法, 但通常只需要实现 next() 方法即可. 该方法会返回 Option<Self::Item>, 返回下一个元素 Some(Self::Item); 如果没有下个元素的话, 就返回 None.

pub trait Iterator {
    type Item;

    // Required method
    fn next(&mut self) -> Option<Self::Item>;

    // Provided methods
    fn next_chunk<const N: usize>(
        &mut self
    ) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>
       where Self: Sized { ... }
    fn size_hint(&self) -> (usize, Option<usize>) { ... }
    fn count(self) -> usize
       where Self: Sized { ... }
    fn last(self) -> Option<Self::Item>
       where Self: Sized { ... }
    ...