Trait core::iter::IteratorExtStable
[-]
[+]
[src]
pub trait IteratorExt: Iterator + Sized {
fn count(self) -> usize { ... }
fn last(self) -> Option<Item> { ... }
fn nth(&mut self, n: usize) -> Option<Item> { ... }
fn chain<U>(self, other: U) -> Chain<Self, U> where U: Iterator<Item=Item> { ... }
fn zip<B, U>(self, other: U) -> Zip<Self, U> where U: Iterator<Item=B> { ... }
fn map<B, F>(self, f: F) -> Map<Item, B, Self, F> where F: FnMut(Item) -> B { ... }
fn filter<P>(self, predicate: P) -> Filter<Item, Self, P> where P: FnMut(&Item) -> bool { ... }
fn filter_map<B, F>(self, f: F) -> FilterMap<Item, B, Self, F> where F: FnMut(Item) -> Option<B> { ... }
fn enumerate(self) -> Enumerate<Self> { ... }
fn peekable(self) -> Peekable<Item, Self> { ... }
fn skip_while<P>(self, predicate: P) -> SkipWhile<Item, Self, P> where P: FnMut(&Item) -> bool { ... }
fn take_while<P>(self, predicate: P) -> TakeWhile<Item, Self, P> where P: FnMut(&Item) -> bool { ... }
fn skip(self, n: usize) -> Skip<Self> { ... }
fn take(self, n: usize) -> Take<Self> { ... }
fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Item, B, Self, St, F> where F: FnMut(&mut St, Item) -> Option<B> { ... }
fn flat_map<B, U, F>(self, f: F) -> FlatMap<Item, B, Self, U, F> where U: Iterator<Item=B>, F: FnMut(Item) -> U { ... }
fn fuse(self) -> Fuse<Self> { ... }
fn inspect<F>(self, f: F) -> Inspect<Item, Self, F> where F: FnMut(&Item) { ... }
fn by_ref<'r>(&'r mut self) -> ByRef<'r, Self> { ... }
fn collect<B: FromIterator<Item>>(self) -> B { ... }
fn partition<B, F>(self, f: F) -> (B, B) where B: Default + Extend<Item>, F: FnMut(&Item) -> bool { ... }
fn fold<B, F>(self, init: B, f: F) -> B where F: FnMut(B, Item) -> B { ... }
fn all<F>(self, f: F) -> bool where F: FnMut(Item) -> bool { ... }
fn any<F>(&mut self, f: F) -> bool where F: FnMut(Item) -> bool { ... }
fn find<P>(&mut self, predicate: P) -> Option<Item> where P: FnMut(&Item) -> bool { ... }
fn position<P>(&mut self, predicate: P) -> Option<usize> where P: FnMut(Item) -> bool { ... }
fn rposition<P>(&mut self, predicate: P) -> Option<usize> where P: FnMut(Item) -> bool, Self: ExactSizeIterator + DoubleEndedIterator { ... }
fn max(self) -> Option<Item> where Item: Ord { ... }
fn min(self) -> Option<Item> where Item: Ord { ... }
fn min_max(self) -> MinMaxResult<Item> where Item: Ord { ... }
fn max_by<B: Ord, F>(self, f: F) -> Option<Item> where F: FnMut(&Item) -> B { ... }
fn min_by<B: Ord, F>(self, f: F) -> Option<Item> where F: FnMut(&Item) -> B { ... }
fn rev(self) -> Rev<Self> { ... }
fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB) where FromA: Default + Extend<A>, FromB: Default + Extend<B>, Self: Iterator<Item=(A, B)> { ... }
fn cloned<T, D>(self) -> Cloned<Self> where Self: Iterator<Item=D>, D: Deref<Target=T>, T: Clone { ... }
fn cycle(self) -> Cycle<Self> where Self: Clone { ... }
fn reverse_in_place<'a, T: 'a>(&mut self) where Self: Iterator<Item=&'a mut T> + DoubleEndedIterator { ... }
}An extension trait providing numerous methods applicable to all iterators.
Provided Methods
fn count(self) -> usize
Counts the number of elements in this iterator.
Example
fn main() { let a = [1i, 2, 3, 4, 5]; let mut it = a.iter(); assert!(it.count() == 5); }let a = [1i, 2, 3, 4, 5]; let mut it = a.iter(); assert!(it.count() == 5);
fn last(self) -> Option<Item>
Loops through the entire iterator, returning the last element of the iterator.
Example
fn main() { let a = [1i, 2, 3, 4, 5]; assert!(a.iter().last().unwrap() == &5); }let a = [1i, 2, 3, 4, 5]; assert!(a.iter().last().unwrap() == &5);
fn nth(&mut self, n: usize) -> Option<Item>
Loops through n iterations, returning the nth element of the
iterator.
Example
fn main() { let a = [1i, 2, 3, 4, 5]; let mut it = a.iter(); assert!(it.nth(2).unwrap() == &3); assert!(it.nth(2) == None); }let a = [1i, 2, 3, 4, 5]; let mut it = a.iter(); assert!(it.nth(2).unwrap() == &3); assert!(it.nth(2) == None);
fn chain<U>(self, other: U) -> Chain<Self, U> where U: Iterator<Item=Item>
Chain this iterator with another, returning a new iterator that will finish iterating over the current iterator, and then iterate over the other specified iterator.
Example
fn main() { let a = [0i]; let b = [1i]; let mut it = a.iter().chain(b.iter()); assert_eq!(it.next().unwrap(), &0); assert_eq!(it.next().unwrap(), &1); assert!(it.next().is_none()); }let a = [0i]; let b = [1i]; let mut it = a.iter().chain(b.iter()); assert_eq!(it.next().unwrap(), &0); assert_eq!(it.next().unwrap(), &1); assert!(it.next().is_none());
fn zip<B, U>(self, other: U) -> Zip<Self, U> where U: Iterator<Item=B>
Creates an iterator that iterates over both this and the specified iterators simultaneously, yielding the two elements as pairs. When either iterator returns None, all further invocations of next() will return None.
Example
fn main() { let a = [0i]; let b = [1i]; let mut it = a.iter().zip(b.iter()); let (x0, x1) = (0i, 1i); assert_eq!(it.next().unwrap(), (&x0, &x1)); assert!(it.next().is_none()); }let a = [0i]; let b = [1i]; let mut it = a.iter().zip(b.iter()); let (x0, x1) = (0i, 1i); assert_eq!(it.next().unwrap(), (&x0, &x1)); assert!(it.next().is_none());
fn map<B, F>(self, f: F) -> Map<Item, B, Self, F> where F: FnMut(Item) -> B
Creates a new iterator that will apply the specified function to each element returned by the first, yielding the mapped element instead.
Example
fn main() { let a = [1i, 2]; let mut it = a.iter().map(|&x| 2 * x); assert_eq!(it.next().unwrap(), 2); assert_eq!(it.next().unwrap(), 4); assert!(it.next().is_none()); }let a = [1i, 2]; let mut it = a.iter().map(|&x| 2 * x); assert_eq!(it.next().unwrap(), 2); assert_eq!(it.next().unwrap(), 4); assert!(it.next().is_none());
fn filter<P>(self, predicate: P) -> Filter<Item, Self, P> where P: FnMut(&Item) -> bool
Creates an iterator that applies the predicate to each element returned
by this iterator. Only elements that have the predicate evaluate to
true will be yielded.
Example
fn main() { let a = [1i, 2]; let mut it = a.iter().filter(|&x| *x > 1); assert_eq!(it.next().unwrap(), &2); assert!(it.next().is_none()); }let a = [1i, 2]; let mut it = a.iter().filter(|&x| *x > 1); assert_eq!(it.next().unwrap(), &2); assert!(it.next().is_none());
fn filter_map<B, F>(self, f: F) -> FilterMap<Item, B, Self, F> where F: FnMut(Item) -> Option<B>
Creates an iterator that both filters and maps elements. If the specified function returns None, the element is skipped. Otherwise the option is unwrapped and the new value is yielded.
Example
fn main() { let a = [1i, 2]; let mut it = a.iter().filter_map(|&x| if x > 1 {Some(2 * x)} else {None}); assert_eq!(it.next().unwrap(), 4); assert!(it.next().is_none()); }let a = [1i, 2]; let mut it = a.iter().filter_map(|&x| if x > 1 {Some(2 * x)} else {None}); assert_eq!(it.next().unwrap(), 4); assert!(it.next().is_none());
fn enumerate(self) -> Enumerate<Self>
Creates an iterator that yields a pair of the value returned by this iterator plus the current index of iteration.
Example
fn main() { let a = [100i, 200]; let mut it = a.iter().enumerate(); let (x100, x200) = (100i, 200i); assert_eq!(it.next().unwrap(), (0, &x100)); assert_eq!(it.next().unwrap(), (1, &x200)); assert!(it.next().is_none()); }let a = [100i, 200]; let mut it = a.iter().enumerate(); let (x100, x200) = (100i, 200i); assert_eq!(it.next().unwrap(), (0, &x100)); assert_eq!(it.next().unwrap(), (1, &x200)); assert!(it.next().is_none());
fn peekable(self) -> Peekable<Item, Self>
Creates an iterator that has a .peek() method
that returns an optional reference to the next element.
Example
fn main() { let xs = [100i, 200, 300]; let mut it = xs.iter().map(|x| *x).peekable(); assert_eq!(*it.peek().unwrap(), 100); assert_eq!(it.next().unwrap(), 100); assert_eq!(it.next().unwrap(), 200); assert_eq!(*it.peek().unwrap(), 300); assert_eq!(*it.peek().unwrap(), 300); assert_eq!(it.next().unwrap(), 300); assert!(it.peek().is_none()); assert!(it.next().is_none()); }let xs = [100i, 200, 300]; let mut it = xs.iter().map(|x| *x).peekable(); assert_eq!(*it.peek().unwrap(), 100); assert_eq!(it.next().unwrap(), 100); assert_eq!(it.next().unwrap(), 200); assert_eq!(*it.peek().unwrap(), 300); assert_eq!(*it.peek().unwrap(), 300); assert_eq!(it.next().unwrap(), 300); assert!(it.peek().is_none()); assert!(it.next().is_none());
fn skip_while<P>(self, predicate: P) -> SkipWhile<Item, Self, P> where P: FnMut(&Item) -> bool
Creates an iterator that invokes the predicate on elements until it returns false. Once the predicate returns false, that element and all further elements are yielded.
Example
fn main() { let a = [1i, 2, 3, 2, 1]; let mut it = a.iter().skip_while(|&a| *a < 3); assert_eq!(it.next().unwrap(), &3); assert_eq!(it.next().unwrap(), &2); assert_eq!(it.next().unwrap(), &1); assert!(it.next().is_none()); }let a = [1i, 2, 3, 2, 1]; let mut it = a.iter().skip_while(|&a| *a < 3); assert_eq!(it.next().unwrap(), &3); assert_eq!(it.next().unwrap(), &2); assert_eq!(it.next().unwrap(), &1); assert!(it.next().is_none());
fn take_while<P>(self, predicate: P) -> TakeWhile<Item, Self, P> where P: FnMut(&Item) -> bool
Creates an iterator that yields elements so long as the predicate returns true. After the predicate returns false for the first time, no further elements will be yielded.
Example
fn main() { let a = [1i, 2, 3, 2, 1]; let mut it = a.iter().take_while(|&a| *a < 3); assert_eq!(it.next().unwrap(), &1); assert_eq!(it.next().unwrap(), &2); assert!(it.next().is_none()); }let a = [1i, 2, 3, 2, 1]; let mut it = a.iter().take_while(|&a| *a < 3); assert_eq!(it.next().unwrap(), &1); assert_eq!(it.next().unwrap(), &2); assert!(it.next().is_none());
fn skip(self, n: usize) -> Skip<Self>
Creates an iterator that skips the first n elements of this iterator,
and then yields all further items.
Example
fn main() { let a = [1i, 2, 3, 4, 5]; let mut it = a.iter().skip(3); assert_eq!(it.next().unwrap(), &4); assert_eq!(it.next().unwrap(), &5); assert!(it.next().is_none()); }let a = [1i, 2, 3, 4, 5]; let mut it = a.iter().skip(3); assert_eq!(it.next().unwrap(), &4); assert_eq!(it.next().unwrap(), &5); assert!(it.next().is_none());
fn take(self, n: usize) -> Take<Self>
Creates an iterator that yields the first n elements of this
iterator, and then will always return None.
Example
fn main() { let a = [1i, 2, 3, 4, 5]; let mut it = a.iter().take(3); assert_eq!(it.next().unwrap(), &1); assert_eq!(it.next().unwrap(), &2); assert_eq!(it.next().unwrap(), &3); assert!(it.next().is_none()); }let a = [1i, 2, 3, 4, 5]; let mut it = a.iter().take(3); assert_eq!(it.next().unwrap(), &1); assert_eq!(it.next().unwrap(), &2); assert_eq!(it.next().unwrap(), &3); assert!(it.next().is_none());
fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Item, B, Self, St, F> where F: FnMut(&mut St, Item) -> Option<B>
Creates a new iterator that behaves in a similar fashion to fold. There is a state which is passed between each iteration and can be mutated as necessary. The yielded values from the closure are yielded from the Scan instance when not None.
Example
fn main() { let a = [1i, 2, 3, 4, 5]; let mut it = a.iter().scan(1, |fac, &x| { *fac = *fac * x; Some(*fac) }); assert_eq!(it.next().unwrap(), 1); assert_eq!(it.next().unwrap(), 2); assert_eq!(it.next().unwrap(), 6); assert_eq!(it.next().unwrap(), 24); assert_eq!(it.next().unwrap(), 120); assert!(it.next().is_none()); }let a = [1i, 2, 3, 4, 5]; let mut it = a.iter().scan(1, |fac, &x| { *fac = *fac * x; Some(*fac) }); assert_eq!(it.next().unwrap(), 1); assert_eq!(it.next().unwrap(), 2); assert_eq!(it.next().unwrap(), 6); assert_eq!(it.next().unwrap(), 24); assert_eq!(it.next().unwrap(), 120); assert!(it.next().is_none());
fn flat_map<B, U, F>(self, f: F) -> FlatMap<Item, B, Self, U, F> where U: Iterator<Item=B>, F: FnMut(Item) -> U
Creates an iterator that maps each element to an iterator, and yields the elements of the produced iterators
Example
fn main() { use std::iter::count; let xs = [2u, 3]; let ys = [0u, 1, 0, 1, 2]; let mut it = xs.iter().flat_map(|&x| count(0u, 1).take(x)); // Check that `it` has the same elements as `ys` let mut i = 0; for x in it { assert_eq!(x, ys[i]); i += 1; } }use std::iter::count; let xs = [2u, 3]; let ys = [0u, 1, 0, 1, 2]; let mut it = xs.iter().flat_map(|&x| count(0u, 1).take(x)); // Check that `it` has the same elements as `ys` let mut i = 0; for x in it { assert_eq!(x, ys[i]); i += 1; }
fn fuse(self) -> Fuse<Self>
Creates an iterator that yields None forever after the underlying
iterator yields None. Random-access iterator behavior is not
affected, only single and double-ended iterator behavior.
Example
fn main() { fn process<U: Iterator<Item=int>>(it: U) -> int { let mut it = it.fuse(); let mut sum = 0; for x in it { if x > 5 { break; } sum += x; } // did we exhaust the iterator? if it.next().is_none() { sum += 1000; } sum } let x = vec![1i,2,3,7,8,9]; assert_eq!(process(x.into_iter()), 6); let x = vec![1i,2,3]; assert_eq!(process(x.into_iter()), 1006); }fn process<U: Iterator<Item=int>>(it: U) -> int { let mut it = it.fuse(); let mut sum = 0; for x in it { if x > 5 { break; } sum += x; } // did we exhaust the iterator? if it.next().is_none() { sum += 1000; } sum } let x = vec![1i,2,3,7,8,9]; assert_eq!(process(x.into_iter()), 6); let x = vec![1i,2,3]; assert_eq!(process(x.into_iter()), 1006);
fn inspect<F>(self, f: F) -> Inspect<Item, Self, F> where F: FnMut(&Item)
Creates an iterator that calls a function with a reference to each element before yielding it. This is often useful for debugging an iterator pipeline.
Example
fn main() { use std::iter::AdditiveIterator; let xs = [1u, 4, 2, 3, 8, 9, 6]; let sum = xs.iter() .map(|&x| x) .inspect(|&x| println!("filtering {}", x)) .filter(|&x| x % 2 == 0) .inspect(|&x| println!("{} made it through", x)) .sum(); println!("{}", sum); }use std::iter::AdditiveIterator; let xs = [1u, 4, 2, 3, 8, 9, 6]; let sum = xs.iter() .map(|&x| x) .inspect(|&x| println!("filtering {}", x)) .filter(|&x| x % 2 == 0) .inspect(|&x| println!("{} made it through", x)) .sum(); println!("{}", sum);
fn by_ref<'r>(&'r mut self) -> ByRef<'r, Self>
Creates a wrapper around a mutable reference to the iterator.
This is useful to allow applying iterator adaptors while still retaining ownership of the original iterator value.
Example
fn main() { let mut xs = range(0u, 10); // sum the first five values let partial_sum = xs.by_ref().take(5).fold(0, |a, b| a + b); assert!(partial_sum == 10); // xs.next() is now `5` assert!(xs.next() == Some(5)); }let mut xs = range(0u, 10); // sum the first five values let partial_sum = xs.by_ref().take(5).fold(0, |a, b| a + b); assert!(partial_sum == 10); // xs.next() is now `5` assert!(xs.next() == Some(5));
fn collect<B: FromIterator<Item>>(self) -> B
Loops through the entire iterator, collecting all of the elements into
a container implementing FromIterator.
Example
fn main() { let a = [1i, 2, 3, 4, 5]; let b: Vec<int> = a.iter().map(|&x| x).collect(); assert!(a.as_slice() == b.as_slice()); }let a = [1i, 2, 3, 4, 5]; let b: Vec<int> = a.iter().map(|&x| x).collect(); assert!(a.as_slice() == b.as_slice());
fn partition<B, F>(self, f: F) -> (B, B) where B: Default + Extend<Item>, F: FnMut(&Item) -> bool
Loops through the entire iterator, collecting all of the elements into one of two containers, depending on a predicate. The elements of the first container satisfy the predicate, while the elements of the second do not.
fn main() { let vec = vec![1i, 2i, 3i, 4i]; let (even, odd): (Vec<int>, Vec<int>) = vec.into_iter().partition(|&n| n % 2 == 0); assert_eq!(even, vec![2, 4]); assert_eq!(odd, vec![1, 3]); }let vec = vec![1i, 2i, 3i, 4i]; let (even, odd): (Vec<int>, Vec<int>) = vec.into_iter().partition(|&n| n % 2 == 0); assert_eq!(even, vec![2, 4]); assert_eq!(odd, vec![1, 3]);
fn fold<B, F>(self, init: B, f: F) -> B where F: FnMut(B, Item) -> B
Performs a fold operation over the entire iterator, returning the eventual state at the end of the iteration.
Example
fn main() { let a = [1i, 2, 3, 4, 5]; assert!(a.iter().fold(0, |a, &b| a + b) == 15); }let a = [1i, 2, 3, 4, 5]; assert!(a.iter().fold(0, |a, &b| a + b) == 15);
fn all<F>(self, f: F) -> bool where F: FnMut(Item) -> bool
Tests whether the predicate holds true for all elements in the iterator.
Example
fn main() { let a = [1i, 2, 3, 4, 5]; assert!(a.iter().all(|x| *x > 0)); assert!(!a.iter().all(|x| *x > 2)); }let a = [1i, 2, 3, 4, 5]; assert!(a.iter().all(|x| *x > 0)); assert!(!a.iter().all(|x| *x > 2));
fn any<F>(&mut self, f: F) -> bool where F: FnMut(Item) -> bool
Tests whether any element of an iterator satisfies the specified predicate.
Example
fn main() { let a = [1i, 2, 3, 4, 5]; let mut it = a.iter(); assert!(it.any(|x| *x == 3)); assert!(!it.any(|x| *x == 3)); }let a = [1i, 2, 3, 4, 5]; let mut it = a.iter(); assert!(it.any(|x| *x == 3)); assert!(!it.any(|x| *x == 3));
fn find<P>(&mut self, predicate: P) -> Option<Item> where P: FnMut(&Item) -> bool
Returns the first element satisfying the specified predicate.
Does not consume the iterator past the first found element.
fn position<P>(&mut self, predicate: P) -> Option<usize> where P: FnMut(Item) -> bool
Return the index of the first element satisfying the specified predicate
fn rposition<P>(&mut self, predicate: P) -> Option<usize> where P: FnMut(Item) -> bool, Self: ExactSizeIterator + DoubleEndedIterator
Return the index of the last element satisfying the specified predicate
If no element matches, None is returned.
fn max(self) -> Option<Item> where Item: Ord
Consumes the entire iterator to return the maximum element.
Example
fn main() { let a = [1i, 2, 3, 4, 5]; assert!(a.iter().max().unwrap() == &5); }let a = [1i, 2, 3, 4, 5]; assert!(a.iter().max().unwrap() == &5);
fn min(self) -> Option<Item> where Item: Ord
Consumes the entire iterator to return the minimum element.
Example
fn main() { let a = [1i, 2, 3, 4, 5]; assert!(a.iter().min().unwrap() == &1); }let a = [1i, 2, 3, 4, 5]; assert!(a.iter().min().unwrap() == &1);
fn min_max(self) -> MinMaxResult<Item> where Item: Ord
min_max finds the minimum and maximum elements in the iterator.
The return type MinMaxResult is an enum of three variants:
NoElementsif the iterator is empty.OneElement(x)if the iterator has exactly one element.MinMax(x, y)is returned otherwise, wherex <= y. Two values are equal if and only if there is more than one element in the iterator and all elements are equal.
On an iterator of length n, min_max does 1.5 * n comparisons,
and so is faster than calling min and max separately which does 2 * n comparisons.
Example
fn main() { use std::iter::MinMaxResult::{NoElements, OneElement, MinMax}; let v: [int; 0] = []; assert_eq!(v.iter().min_max(), NoElements); let v = [1i]; assert!(v.iter().min_max() == OneElement(&1)); let v = [1i, 2, 3, 4, 5]; assert!(v.iter().min_max() == MinMax(&1, &5)); let v = [1i, 2, 3, 4, 5, 6]; assert!(v.iter().min_max() == MinMax(&1, &6)); let v = [1i, 1, 1, 1]; assert!(v.iter().min_max() == MinMax(&1, &1)); }use std::iter::MinMaxResult::{NoElements, OneElement, MinMax}; let v: [int; 0] = []; assert_eq!(v.iter().min_max(), NoElements); let v = [1i]; assert!(v.iter().min_max() == OneElement(&1)); let v = [1i, 2, 3, 4, 5]; assert!(v.iter().min_max() == MinMax(&1, &5)); let v = [1i, 2, 3, 4, 5, 6]; assert!(v.iter().min_max() == MinMax(&1, &6)); let v = [1i, 1, 1, 1]; assert!(v.iter().min_max() == MinMax(&1, &1));
fn max_by<B: Ord, F>(self, f: F) -> Option<Item> where F: FnMut(&Item) -> B
Return the element that gives the maximum value from the specified function.
Example
extern crate core; fn main() { use core::num::SignedInt; let xs = [-3i, 0, 1, 5, -10]; assert_eq!(*xs.iter().max_by(|x| x.abs()).unwrap(), -10); }use core::num::SignedInt; let xs = [-3i, 0, 1, 5, -10]; assert_eq!(*xs.iter().max_by(|x| x.abs()).unwrap(), -10);
fn min_by<B: Ord, F>(self, f: F) -> Option<Item> where F: FnMut(&Item) -> B
Return the element that gives the minimum value from the specified function.
Example
extern crate core; fn main() { use core::num::SignedInt; let xs = [-3i, 0, 1, 5, -10]; assert_eq!(*xs.iter().min_by(|x| x.abs()).unwrap(), 0); }use core::num::SignedInt; let xs = [-3i, 0, 1, 5, -10]; assert_eq!(*xs.iter().min_by(|x| x.abs()).unwrap(), 0);
fn rev(self) -> Rev<Self>
Change the direction of the iterator
The flipped iterator swaps the ends on an iterator that can already be iterated from the front and from the back.
If the iterator also implements RandomAccessIterator, the flipped iterator is also random access, with the indices starting at the back of the original iterator.
Note: Random access with flipped indices still only applies to the first
uint::MAX elements of the original iterator.
fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB) where FromA: Default + Extend<A>, FromB: Default + Extend<B>, Self: Iterator<Item=(A, B)>
Converts an iterator of pairs into a pair of containers.
Loops through the entire iterator, collecting the first component of each item into one new container, and the second component into another.
fn cloned<T, D>(self) -> Cloned<Self> where Self: Iterator<Item=D>, D: Deref<Target=T>, T: Clone
Creates an iterator that clones the elements it yields. Useful for converting an
Iterator<&T> to an Iterator
fn cycle(self) -> Cycle<Self> where Self: Clone
Repeats an iterator endlessly
Example
fn main() { use std::iter::count; let a = count(1i,1i).take(1); let mut cy = a.cycle(); assert_eq!(cy.next(), Some(1)); assert_eq!(cy.next(), Some(1)); }use std::iter::count; let a = count(1i,1i).take(1); let mut cy = a.cycle(); assert_eq!(cy.next(), Some(1)); assert_eq!(cy.next(), Some(1));
fn reverse_in_place<'a, T: 'a>(&mut self) where Self: Iterator<Item=&'a mut T> + DoubleEndedIterator
Use an iterator to reverse a container in place.
Implementors
impl<I> IteratorExt for I where I: Iterator