Trait std::iter::DoubleEndedIterator
[−]
[src]
pub trait DoubleEndedIterator: Iterator { fn next_back(&mut self) -> Option<Self::Item>; }
An iterator able to yield elements from both ends.
Something that implements DoubleEndedIterator
has one extra capability
over something that implements Iterator
: the ability to also take
Item
s from the back, as well as the front.
It is important to note that both back and forth work on the same range, and do not cross: iteration is over when they meet in the middle.
Examples
Basic usage:
fn main() { let numbers = vec![1, 2, 3]; let mut iter = numbers.iter(); let n = iter.next(); assert_eq!(Some(&1), n); let n = iter.next_back(); assert_eq!(Some(&3), n); let n = iter.next_back(); assert_eq!(Some(&2), n); let n = iter.next(); assert_eq!(None, n); let n = iter.next_back(); assert_eq!(None, n); }let numbers = vec![1, 2, 3]; let mut iter = numbers.iter(); let n = iter.next(); assert_eq!(Some(&1), n); let n = iter.next_back(); assert_eq!(Some(&3), n); let n = iter.next_back(); assert_eq!(Some(&2), n); let n = iter.next(); assert_eq!(None, n); let n = iter.next_back(); assert_eq!(None, n);
Required Methods
fn next_back(&mut self) -> Option<Self::Item>
An iterator able to yield elements from both ends.
As this is the only method for this trait, the trait-level docs contain more details.
Examples
Basic usage:
fn main() { let numbers = vec![1, 2, 3]; let mut iter = numbers.iter(); let n = iter.next(); assert_eq!(Some(&1), n); let n = iter.next_back(); assert_eq!(Some(&3), n); let n = iter.next_back(); assert_eq!(Some(&2), n); let n = iter.next(); assert_eq!(None, n); let n = iter.next_back(); assert_eq!(None, n); }let numbers = vec![1, 2, 3]; let mut iter = numbers.iter(); let n = iter.next(); assert_eq!(Some(&1), n); let n = iter.next_back(); assert_eq!(Some(&3), n); let n = iter.next_back(); assert_eq!(Some(&2), n); let n = iter.next(); assert_eq!(None, n); let n = iter.next_back(); assert_eq!(None, n);
Implementors
impl<'a, I> DoubleEndedIterator for &'a mut I where I: DoubleEndedIterator + ?Sized
impl<I> DoubleEndedIterator for Rev<I> where I: DoubleEndedIterator
impl<'a, I, T> DoubleEndedIterator for Cloned<I> where T: 'a + Clone, I: DoubleEndedIterator<Item=&'a T>
impl<A, B> DoubleEndedIterator for Chain<A, B> where B: DoubleEndedIterator<Item=A::Item>, A: DoubleEndedIterator
impl<A, B> DoubleEndedIterator for Zip<A, B> where A: DoubleEndedIterator + ExactSizeIterator, B: DoubleEndedIterator + ExactSizeIterator
impl<B, I, F> DoubleEndedIterator for Map<I, F> where F: FnMut(I::Item) -> B, I: DoubleEndedIterator
impl<I, P> DoubleEndedIterator for Filter<I, P> where P: FnMut(&I::Item) -> bool, I: DoubleEndedIterator
impl<B, I, F> DoubleEndedIterator for FilterMap<I, F> where F: FnMut(I::Item) -> Option<B>, I: DoubleEndedIterator
impl<I> DoubleEndedIterator for Enumerate<I> where I: ExactSizeIterator + DoubleEndedIterator
impl<I, U, F> DoubleEndedIterator for FlatMap<I, U, F> where U: IntoIterator, I: DoubleEndedIterator, F: FnMut(I::Item) -> U, U::IntoIter: DoubleEndedIterator
impl<I> DoubleEndedIterator for Fuse<I> where I: DoubleEndedIterator
impl<I, F> DoubleEndedIterator for Inspect<I, F> where F: FnMut(&I::Item) -> (), I: DoubleEndedIterator
impl<A> DoubleEndedIterator for RangeInclusive<A> where A: Step + One + Clone + PartialEq<A>, &'a A: Add<&'a A>, &'a A: Sub<&'a A>, &'a A::Output == A, &'a A::Output == A
impl<A> DoubleEndedIterator for Range<A> where A: Clone + Step + One, &'a A: Add<&'a A>, &'a A: Sub<&'a A>, &'a A::Output == A, &'a A::Output == A
impl<A> DoubleEndedIterator for Repeat<A> where A: Clone
impl<T> DoubleEndedIterator for Empty<T>
impl<T> DoubleEndedIterator for Once<T>
impl<A> DoubleEndedIterator for Item<A>
impl<'a, A> DoubleEndedIterator for Iter<'a, A>
impl<'a, A> DoubleEndedIterator for IterMut<'a, A>
impl<A> DoubleEndedIterator for IntoIter<A>
impl<'a, T> DoubleEndedIterator for Iter<'a, T>
impl<'a, T> DoubleEndedIterator for IterMut<'a, T>
impl<T> DoubleEndedIterator for IntoIter<T>
impl<'a, T> DoubleEndedIterator for Iter<'a, T>
impl<'a, T> DoubleEndedIterator for IterMut<'a, T>
impl<'a, T, P> DoubleEndedIterator for Split<'a, T, P> where P: FnMut(&T) -> bool
impl<'a, T, P> DoubleEndedIterator for SplitMut<'a, T, P> where P: FnMut(&T) -> bool
impl<'a, T> DoubleEndedIterator for Windows<'a, T>
impl<'a, T> DoubleEndedIterator for Chunks<'a, T>
impl<'a, T> DoubleEndedIterator for ChunksMut<'a, T>
impl<'a> DoubleEndedIterator for Chars<'a>
impl<'a> DoubleEndedIterator for CharIndices<'a>
impl<'a> DoubleEndedIterator for Bytes<'a>
impl<'a, P> DoubleEndedIterator for Split<'a, P> where P: Pattern<'a>, P::Searcher: DoubleEndedSearcher<'a>
impl<'a, P> DoubleEndedIterator for RSplit<'a, P> where P: Pattern<'a>, P::Searcher: DoubleEndedSearcher<'a>
impl<'a, P> DoubleEndedIterator for SplitTerminator<'a, P> where P: Pattern<'a>, P::Searcher: DoubleEndedSearcher<'a>
impl<'a, P> DoubleEndedIterator for RSplitTerminator<'a, P> where P: Pattern<'a>, P::Searcher: DoubleEndedSearcher<'a>
impl<'a, P> DoubleEndedIterator for MatchIndices<'a, P> where P: Pattern<'a>, P::Searcher: DoubleEndedSearcher<'a>
impl<'a, P> DoubleEndedIterator for RMatchIndices<'a, P> where P: Pattern<'a>, P::Searcher: DoubleEndedSearcher<'a>
impl<'a, P> DoubleEndedIterator for Matches<'a, P> where P: Pattern<'a>, P::Searcher: DoubleEndedSearcher<'a>
impl<'a, P> DoubleEndedIterator for RMatches<'a, P> where P: Pattern<'a>, P::Searcher: DoubleEndedSearcher<'a>
impl<'a> DoubleEndedIterator for Lines<'a>
impl<'a> DoubleEndedIterator for LinesAny<'a>
impl<I> DoubleEndedIterator for Box<I> where I: DoubleEndedIterator + ?Sized
impl<'a, T> DoubleEndedIterator for Iter<'a, T>
impl<T> DoubleEndedIterator for IntoIter<T>
impl<'a, T> DoubleEndedIterator for Drain<'a, T> where T: 'a
impl<T> DoubleEndedIterator for RawItems<T>
impl<K, V, E, Impl> DoubleEndedIterator for AbsTraversal<Impl> where Impl: TraversalImpl<Item=(K, V), Edge=E>
impl<K, V, E, T> DoubleEndedIterator for AbsIter<T> where T: DoubleEndedIterator<Item=TraversalItem<K, V, E>> + Traverse<E>
impl<'a, K, V> DoubleEndedIterator for Iter<'a, K, V>
impl<'a, K, V> DoubleEndedIterator for IterMut<'a, K, V>
impl<K, V> DoubleEndedIterator for IntoIter<K, V>
impl<'a, K, V> DoubleEndedIterator for Keys<'a, K, V>
impl<'a, K, V> DoubleEndedIterator for Values<'a, K, V>
impl<'a, K, V> DoubleEndedIterator for Range<'a, K, V>
impl<'a, K, V> DoubleEndedIterator for RangeMut<'a, K, V>
impl<'a, T> DoubleEndedIterator for Iter<'a, T>
impl<T> DoubleEndedIterator for IntoIter<T>
impl<'a, T> DoubleEndedIterator for Range<'a, T>
impl<'a, A> DoubleEndedIterator for Iter<'a, A>
impl<'a, A> DoubleEndedIterator for IterMut<'a, A>
impl<A> DoubleEndedIterator for IntoIter<A>
impl<'a> DoubleEndedIterator for Drain<'a>
impl<T> DoubleEndedIterator for IntoIter<T>
impl<'a, T> DoubleEndedIterator for Drain<'a, T>
impl<'a, T> DoubleEndedIterator for Iter<'a, T>
impl<'a, T> DoubleEndedIterator for IterMut<'a, T>
impl<T> DoubleEndedIterator for IntoIter<T>
impl<'a, T> DoubleEndedIterator for Drain<'a, T> where T: 'a
impl<'a> DoubleEndedIterator for SplitWhitespace<'a>
impl DoubleEndedIterator for EscapeDefault
impl<'a> DoubleEndedIterator for Iter<'a>
impl<'a> DoubleEndedIterator for Components<'a>