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.
In a similar fashion to the Iterator
protocol, once a DoubleEndedIterator
returns None
from a next_back()
, calling it again may or may not ever return Some
again. next()
and next_back()
are interchangable for this purpose.
Basic usage:
let numbers = vec![1, 2, 3, 4, 5, 6]; let mut iter = numbers.iter(); assert_eq!(Some(&1), iter.next()); assert_eq!(Some(&6), iter.next_back()); assert_eq!(Some(&5), iter.next_back()); assert_eq!(Some(&2), iter.next()); assert_eq!(Some(&3), iter.next()); assert_eq!(Some(&4), iter.next()); assert_eq!(None, iter.next()); assert_eq!(None, iter.next_back());
fn next_back(&mut self) -> Option<Self::Item>
Removes and returns an element from the end of the iterator.
Returns None
when there are no more elements.
The trait-level docs contain more details.
Basic usage:
let numbers = vec![1, 2, 3, 4, 5, 6]; let mut iter = numbers.iter(); assert_eq!(Some(&1), iter.next()); assert_eq!(Some(&6), iter.next_back()); assert_eq!(Some(&5), iter.next_back()); assert_eq!(Some(&2), iter.next()); assert_eq!(Some(&3), iter.next()); assert_eq!(Some(&4), iter.next()); assert_eq!(None, iter.next()); assert_eq!(None, iter.next_back());
impl<'a, T> DoubleEndedIterator for std::collections::binary_heap::Iter<'a, T>
impl<T> DoubleEndedIterator for std::collections::binary_heap::IntoIter<T>
impl<'a, T> DoubleEndedIterator for std::collections::binary_heap::Drain<'a, T> where T: 'a
impl<'a, K, V> DoubleEndedIterator for std::collections::btree_map::Iter<'a, K, V> where K: 'a, V: 'a
impl<'a, K, V> DoubleEndedIterator for std::collections::btree_map::IterMut<'a, K, V> where K: 'a, V: 'a
impl<K, V> DoubleEndedIterator for std::collections::btree_map::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 ValuesMut<'a, K, V>
impl<'a, K, V> DoubleEndedIterator for std::collections::btree_map::Range<'a, K, V>
impl<'a, K, V> DoubleEndedIterator for RangeMut<'a, K, V>
impl<'a, T> DoubleEndedIterator for std::collections::btree_set::Iter<'a, T>
impl<T> DoubleEndedIterator for std::collections::btree_set::IntoIter<T>
impl<'a, T> DoubleEndedIterator for std::collections::btree_set::Range<'a, T>
impl<'a, T> DoubleEndedIterator for std::collections::linked_list::Iter<'a, T>
impl<'a, T> DoubleEndedIterator for std::collections::linked_list::IterMut<'a, T>
impl<T> DoubleEndedIterator for std::collections::linked_list::IntoIter<T>
impl<'a> DoubleEndedIterator for std::string::Drain<'a>
impl<T> DoubleEndedIterator for std::vec::IntoIter<T>
impl<'a, T> DoubleEndedIterator for std::vec::Drain<'a, T>
impl<'a, T> DoubleEndedIterator for std::collections::vec_deque::Iter<'a, T>
impl<'a, T> DoubleEndedIterator for std::collections::vec_deque::IterMut<'a, T>
impl<T> DoubleEndedIterator for std::collections::vec_deque::IntoIter<T>
impl<'a, T> DoubleEndedIterator for std::collections::vec_deque::Drain<'a, T> where T: 'a
impl<I> DoubleEndedIterator for Box<I> where I: DoubleEndedIterator + ?Sized
impl<A> DoubleEndedIterator for std::ops::Range<A> where A: Step + Clone,
&'a A: Add<&'a A>,
&'a A: Sub<&'a A>,
&'a A::Output == A,
&'a A::Output == A
impl<A> DoubleEndedIterator for RangeInclusive<A> where A: Step,
&'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, 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 I: DoubleEndedIterator<Item=&'a T>,
T: 'a + Clone
impl<A, B> DoubleEndedIterator for Chain<A, B> where A: DoubleEndedIterator,
B: DoubleEndedIterator<Item=A::Item>
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 I: DoubleEndedIterator,
P: FnMut(&I::Item) -> bool
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> DoubleEndedIterator for Skip<I> where I: DoubleEndedIterator + ExactSizeIterator
impl<I, U, F> DoubleEndedIterator for FlatMap<I, U, F> where F: FnMut(I::Item) -> U,
I: DoubleEndedIterator,
U: IntoIterator,
U::IntoIter: DoubleEndedIterator
impl<I> DoubleEndedIterator for std::iter::Fuse<I> where I: DoubleEndedIterator
impl<I> DoubleEndedIterator for std::iter::Fuse<I> where I: DoubleEndedIterator + FusedIterator
impl<I, F> DoubleEndedIterator for Inspect<I, F> where F: FnMut(&I::Item) -> (),
I: DoubleEndedIterator
impl<'a, A> DoubleEndedIterator for std::option::Iter<'a, A>
impl<'a, A> DoubleEndedIterator for std::option::IterMut<'a, A>
impl<A> DoubleEndedIterator for std::option::IntoIter<A>
impl<'a, T> DoubleEndedIterator for std::result::Iter<'a, T>
impl<'a, T> DoubleEndedIterator for std::result::IterMut<'a, T>
impl<T> DoubleEndedIterator for std::result::IntoIter<T>
impl<'a, T, P> DoubleEndedIterator for std::slice::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> DoubleEndedIterator for Lines<'a>
impl<'a> DoubleEndedIterator for LinesAny<'a>
impl<'a, T> DoubleEndedIterator for std::slice::Iter<'a, T>
impl<'a, T> DoubleEndedIterator for std::slice::IterMut<'a, T>
impl<'a, P> DoubleEndedIterator for std::str::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 SplitWhitespace<'a>
impl DoubleEndedIterator for EscapeDefault
impl DoubleEndedIterator for Args
impl DoubleEndedIterator for ArgsOs
impl<'a> DoubleEndedIterator for std::path::Iter<'a>
impl<'a> DoubleEndedIterator for Components<'a>
© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/std/iter/trait.DoubleEndedIterator.html