DoubleEndedIterator

这个 trait 提供了方法, 可以从前后两端访问迭代器.

ub trait DoubleEndedIterator: Iterator {
    fn next_back(&mut self) -> Option<Self::Item>;

    fn advance_back_by(&mut self, n: usize) -> Result<(), NonZeroUsize> { ... }
    fn nth_back(&mut self, n: usize) -> Option<Self::Item> { ... }
    ...
}

比如 VecDeque 双端队列以及 LinkedList 双向链表的迭代器就实现了这个 trait.

这个方法平时并不会直接被调用, 而是使用 Iterator::rev() 方法, 调转迭代器的执行方向.

#![allow(unused)]
fn main() {
let a = [1, 2, 3];

let mut iter = a.iter().rev();

assert_eq!(iter.next(), Some(&3));
assert_eq!(iter.next(), Some(&2));
assert_eq!(iter.next(), Some(&1));

assert_eq!(iter.next(), None);
}