Trait stdcli::prelude::itertools::__std_iter::DoubleEndedIterator1.0.0 [] [src]

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

    fn rfind<P>(&mut self, predicate: P) -> Option<Self::Item>
    where
        P: FnMut(&Self::Item) -> bool
, { ... } }

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 Items 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 interchangeable for this purpose.

Examples

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());

Required Methods

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.

Examples

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());

Provided Methods

🔬 This is a nightly-only experimental API. (iter_rfind)

Searches for an element of an iterator from the right that satisfies a predicate.

rfind() takes a closure that returns true or false. It applies this closure to each element of the iterator, starting at the end, and if any of them return true, then rfind() returns Some(element). If they all return false, it returns None.

rfind() is short-circuiting; in other words, it will stop processing as soon as the closure returns true.

Because rfind() takes a reference, and many iterators iterate over references, this leads to a possibly confusing situation where the argument is a double reference. You can see this effect in the examples below, with &&x.

Examples

Basic usage:

#![feature(iter_rfind)]

let a = [1, 2, 3];

assert_eq!(a.iter().rfind(|&&x| x == 2), Some(&2));

assert_eq!(a.iter().rfind(|&&x| x == 5), None);

Stopping at the first true:

#![feature(iter_rfind)]

let a = [1, 2, 3];

let mut iter = a.iter();

assert_eq!(iter.rfind(|&&x| x == 2), Some(&2));

// we can still use `iter`, as there are more elements.
assert_eq!(iter.next_back(), Some(&1));

Implementations on Foreign Types

impl<T> DoubleEndedIterator for IntoIter<T>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T> DoubleEndedIterator for ChunksMut<'a, T>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, A> DoubleEndedIterator for Iter<'a, A>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T, P> DoubleEndedIterator for SplitMut<'a, T, P> where
    P: FnMut(&T) -> bool
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<A> DoubleEndedIterator for IntoIter<A>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T> DoubleEndedIterator for Iter<'a, T>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T> DoubleEndedIterator for Windows<'a, T>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, P> DoubleEndedIterator for SplitTerminator<'a, P> where
    P: Pattern<'a>,
    <P as Pattern<'a>>::Searcher: DoubleEndedSearcher<'a>, 
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a> DoubleEndedIterator for Bytes<'a>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T, P> DoubleEndedIterator for RSplit<'a, T, P> where
    P: FnMut(&T) -> bool
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, P> DoubleEndedIterator for RSplit<'a, P> where
    P: Pattern<'a>,
    <P as Pattern<'a>>::Searcher: DoubleEndedSearcher<'a>, 
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T, P> DoubleEndedIterator for Split<'a, T, P> where
    P: FnMut(&T) -> bool
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<A> DoubleEndedIterator for RangeInclusive<A> where
    A: Step
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, P> DoubleEndedIterator for MatchIndices<'a, P> where
    P: Pattern<'a>,
    <P as Pattern<'a>>::Searcher: DoubleEndedSearcher<'a>, 
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a> DoubleEndedIterator for LinesAny<'a>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a> DoubleEndedIterator for Chars<'a>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a> DoubleEndedIterator for Lines<'a>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, P> DoubleEndedIterator for RMatchIndices<'a, P> where
    P: Pattern<'a>,
    <P as Pattern<'a>>::Searcher: DoubleEndedSearcher<'a>, 
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, I> DoubleEndedIterator for &'a mut I where
    I: DoubleEndedIterator + ?Sized
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T> DoubleEndedIterator for Iter<'a, T>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, A> DoubleEndedIterator for IterMut<'a, A>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, P> DoubleEndedIterator for Split<'a, P> where
    P: Pattern<'a>,
    <P as Pattern<'a>>::Searcher: DoubleEndedSearcher<'a>, 
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, P> DoubleEndedIterator for Matches<'a, P> where
    P: Pattern<'a>,
    <P as Pattern<'a>>::Searcher: DoubleEndedSearcher<'a>, 
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, P> DoubleEndedIterator for RMatches<'a, P> where
    P: Pattern<'a>,
    <P as Pattern<'a>>::Searcher: DoubleEndedSearcher<'a>, 
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<A> DoubleEndedIterator for Range<A> where
    A: Step
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T, P> DoubleEndedIterator for RSplitMut<'a, T, P> where
    P: FnMut(&T) -> bool
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T> DoubleEndedIterator for Chunks<'a, T>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, P> DoubleEndedIterator for RSplitTerminator<'a, P> where
    P: Pattern<'a>,
    <P as Pattern<'a>>::Searcher: DoubleEndedSearcher<'a>, 
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T> DoubleEndedIterator for IterMut<'a, T>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T> DoubleEndedIterator for IterMut<'a, T>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a> DoubleEndedIterator for CharIndices<'a>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a> DoubleEndedIterator for Values<'a>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a> DoubleEndedIterator for OsValues<'a>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, K, V> DoubleEndedIterator for Entries<'a, K, V>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, K, V> DoubleEndedIterator for Values<'a, K, V>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, K, V> DoubleEndedIterator for Values<'a, K, V>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T> DoubleEndedIterator for Iter<'a, T>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, K, V> DoubleEndedIterator for Keys<'a, K, V>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T> DoubleEndedIterator for Iter<'a, T>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, K, V> DoubleEndedIterator for Entries<'a, K, V>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, K, V> DoubleEndedIterator for Keys<'a, K, V>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, K, V> DoubleEndedIterator for Iter<'a, K, V>

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, K, V> DoubleEndedIterator for IterMut<'a, K, V>

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, K, V> DoubleEndedIterator for Keys<'a, K, V>

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<K, V> DoubleEndedIterator for IntoIter<K, V>

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, K, V> DoubleEndedIterator for Values<'a, K, V>

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T> DoubleEndedIterator for IterMut<'a, T>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T> DoubleEndedIterator for Iter<'a, T>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, K, V> DoubleEndedIterator for Values<'a, K, V>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T> DoubleEndedIterator for Drain<'a, T> where
    T: 'a, 
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, K, V> DoubleEndedIterator for Iter<'a, K, V> where
    K: 'a,
    V: 'a, 
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, K, V> DoubleEndedIterator for RangeMut<'a, K, V>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T> DoubleEndedIterator for Iter<'a, T>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, K, V> DoubleEndedIterator for Range<'a, K, V>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, K, V> DoubleEndedIterator for ValuesMut<'a, K, V>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T> DoubleEndedIterator for Drain<'a, T> where
    T: 'a, 
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, K, V> DoubleEndedIterator for IterMut<'a, K, V> where
    K: 'a,
    V: 'a, 
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a> DoubleEndedIterator for Drain<'a>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T> DoubleEndedIterator for Range<'a, T>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<K, V> DoubleEndedIterator for IntoIter<K, V>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<I> DoubleEndedIterator for Box<I> where
    I: DoubleEndedIterator + ?Sized
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T> DoubleEndedIterator for Drain<'a, T>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, I> DoubleEndedIterator for Splice<'a, I> where
    I: Iterator
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<T> DoubleEndedIterator for IntoIter<T>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<T> DoubleEndedIterator for IntoIter<T>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T> DoubleEndedIterator for IterMut<'a, T>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, K, V> DoubleEndedIterator for Keys<'a, K, V>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T> DoubleEndedIterator for Iter<'a, T>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<T> DoubleEndedIterator for IntoIter<T>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T> DoubleEndedIterator for Iter<'a, T>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<T> DoubleEndedIterator for IntoIter<T>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<T> DoubleEndedIterator for IntoIter<T>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<A> DoubleEndedIterator for Range<A> where
    A: Integer + Clone + ToPrimitive
[src]

Integer is required to ensure the range will be the same regardless of the direction it is consumed.

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<A> DoubleEndedIterator for RangeInclusive<A> where
    A: Sub<A, Output = A> + Integer + Clone + ToPrimitive
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl DoubleEndedIterator for ArgsOs
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl DoubleEndedIterator for Args
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a> DoubleEndedIterator for Components<'a>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a> DoubleEndedIterator for Iter<'a>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl DoubleEndedIterator for EscapeDefault
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, V> DoubleEndedIterator for Keys<'a, V>

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, V> DoubleEndedIterator for IterMut<'a, V>

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, V> DoubleEndedIterator for Drain<'a, V>

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, V> DoubleEndedIterator for Values<'a, V>

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, V> DoubleEndedIterator for Iter<'a, V>

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<V> DoubleEndedIterator for IntoIter<V>

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T> DoubleEndedIterator for Drain<'a, T> where
    T: 'a, 

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<A> DoubleEndedIterator for IntoIter<A> where
    A: Array, 

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a, T> DoubleEndedIterator for Drain<'a, T> where
    T: 'a, 

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<A> DoubleEndedIterator for IntoIter<A> where
    A: Array, 

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a> DoubleEndedIterator for SplitWhitespace<'a>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

impl<'a> DoubleEndedIterator for Memchr<'a>
[src]

[src]

[src]

🔬 This is a nightly-only experimental API. (iter_rfind)

Implementors