pub fn rciter<I>(iterable: I) -> RcIter<I::IntoIter> ⓘwhere I: IntoIterator,
Return an iterator inside a
RcIter can be cloned, and each clone will refer back to the
same original iterator.
RcIter allows doing interesting things like using
.zip() on an iterator with
itself, at the cost of runtime borrow checking which may have a performance
Iterator element type is
use itertools::rciter; use itertools::zip; // In this example a range iterator is created and we iterate it using // three separate handles (two of them given to zip). // We also use the IntoIterator implementation for `&RcIter`. let mut iter = rciter(0..9); let mut z = zip(&iter, &iter); assert_eq!(z.next(), Some((0, 1))); assert_eq!(z.next(), Some((2, 3))); assert_eq!(z.next(), Some((4, 5))); assert_eq!(iter.next(), Some(6)); assert_eq!(z.next(), Some((7, 8))); assert_eq!(z.next(), None);
Panics in iterator methods if a borrow error is encountered in the
iterator methods. It can only happen if the
RcIter is reentered in
.next(), i.e. if it somehow participates in an “iterator knot”
where it is an adaptor of itself.