On this page
Struct std::ops::RangeFrom
pub struct RangeFrom<Idx> {
pub start: Idx,
}
A range only bounded inclusively below (start..
).
The RangeFrom
start..
contains all values with x >= start
.
Note: Overflow in the Iterator
implementation (when the contained data type reaches its numerical limit) is allowed to panic, wrap, or saturate. This behavior is defined by the implementation of the Step
trait. For primitive integers, this follows the normal rules, and respects the overflow checks profile (panic in debug, wrap in release). Note also that overflow happens earlier than you might assume: the overflow happens in the call to next
that yields the maximum value, as the range must be set to a state to yield the next value.
Examples
The start..
syntax is a RangeFrom
:
assert_eq!((2..), std::ops::RangeFrom { start: 2 });
assert_eq!(2 + 3 + 4, (2..).take(3).sum());
let arr = [0, 1, 2, 3, 4];
assert_eq!(arr[ .. ], [0, 1, 2, 3, 4]);
assert_eq!(arr[ .. 3], [0, 1, 2 ]);
assert_eq!(arr[ ..=3], [0, 1, 2, 3 ]);
assert_eq!(arr[1.. ], [ 1, 2, 3, 4]); // This is a `RangeFrom`
assert_eq!(arr[1.. 3], [ 1, 2 ]);
assert_eq!(arr[1..=3], [ 1, 2, 3 ]);
Fields
start: Idx
The lower bound of the range (inclusive).
Implementations
impl<Idx> RangeFrom<Idx>
where
Idx: PartialOrd,
pub fn contains<U>(&self, item: &U) -> bool
where
Idx: PartialOrd<U>,
U: PartialOrd<Idx> + ?Sized,
Returns true
if item
is contained in the range.
Examples
assert!(!(3..).contains(&2));
assert!( (3..).contains(&3));
assert!( (3..).contains(&1_000_000_000));
assert!( (0.0..).contains(&0.5));
assert!(!(0.0..).contains(&f32::NAN));
assert!(!(f32::NAN..).contains(&0.5));
Trait Implementations
impl<Idx> Clone for RangeFrom<Idx>
where
Idx: Clone,
fn clone(&self) -> RangeFrom<Idx> โ
fn clone_from(&mut self, source: &Self)
source
. Read more
impl<Idx> Debug for RangeFrom<Idx>
where
Idx: Debug,
fn fmt(&self, fmt: &mut Formatter<'_>) -> Result<(), Error>
impl<Idx> Hash for RangeFrom<Idx>
where
Idx: Hash,
fn hash<__H>(&self, state: &mut __H)
where
__H: Hasher,
fn hash_slice<H>(data: &[Self], state: &mut H)
where
H: Hasher,
Self: Sized,
impl Index<RangeFrom<usize>> for CStr
type Output = CStr
fn index(&self, index: RangeFrom<usize>) -> &CStr
container[index]
) operation. Read more
impl Index<RangeFrom<usize>> for String
type Output = str
fn index(&self, index: RangeFrom<usize>) -> &str
container[index]
) operation. Read more
impl IndexMut<RangeFrom<usize>> for String
fn index_mut(&mut self, index: RangeFrom<usize>) -> &mut str
container[index]
) operation. Read more
impl<A> Iterator for RangeFrom<A>
where
A: Step,
type Item = A
fn next(&mut self) -> Option<A>
fn size_hint(&self) -> (usize, Option<usize>)
fn nth(&mut self, n: usize) -> Option<A>
n
th element of the iterator. Read more
fn next_chunk<const N: usize>(
&mut self
) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>
where
Self: Sized,
iter_next_chunk
#98326)
N
values. Read more
fn count(self) -> usize
where
Self: Sized,
fn last(self) -> Option<Self::Item>
where
Self: Sized,
fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>
iter_advance_by
#77404)
n
elements. Read more
fn step_by(self, step: usize) -> StepBy<Self> โ
where
Self: Sized,
fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter> โ
where
Self: Sized,
U: IntoIterator<Item = Self::Item>,
fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter> โ
where
Self: Sized,
U: IntoIterator,
fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G> โ
where
Self: Sized,
G: FnMut() -> Self::Item,
iter_intersperse
#79524)
separator
between adjacent items of the original iterator. Read more
fn map<B, F>(self, f: F) -> Map<Self, F> โ
where
Self: Sized,
F: FnMut(Self::Item) -> B,
fn for_each<F>(self, f: F)
where
Self: Sized,
F: FnMut(Self::Item),
fn filter<P>(self, predicate: P) -> Filter<Self, P> โ
where
Self: Sized,
P: FnMut(&Self::Item) -> bool,
fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F> โ
where
Self: Sized,
F: FnMut(Self::Item) -> Option<B>,
fn enumerate(self) -> Enumerate<Self> โ
where
Self: Sized,
fn peekable(self) -> Peekable<Self> โ
where
Self: Sized,
peek
and peek_mut
methods to look at the next element of the iterator without consuming it. See their documentation for more information. Read more
fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P> โ
where
Self: Sized,
P: FnMut(&Self::Item) -> bool,
fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P> โ
where
Self: Sized,
P: FnMut(&Self::Item) -> bool,
fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P> โ
where
Self: Sized,
P: FnMut(Self::Item) -> Option<B>,
fn skip(self, n: usize) -> Skip<Self> โ
where
Self: Sized,
n
elements. Read more
fn take(self, n: usize) -> Take<Self> โ
where
Self: Sized,
n
elements, or fewer if the underlying iterator ends sooner. Read more
fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F> โ
where
Self: Sized,
F: FnMut(&mut St, Self::Item) -> Option<B>,
fold
, holds internal state, but unlike fold
, produces a new iterator. Read more
fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F> โ
where
Self: Sized,
U: IntoIterator,
F: FnMut(Self::Item) -> U,
fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N> โ
where
Self: Sized,
F: FnMut(&[Self::Item; N]) -> R,
iter_map_windows
#87155)
f
for each contiguous window of size N
over self
and returns an iterator over the outputs of f
. Like slice::windows()
, the windows during mapping overlap as well. Read more
fn fuse(self) -> Fuse<Self> โ
where
Self: Sized,
fn inspect<F>(self, f: F) -> Inspect<Self, F> โ
where
Self: Sized,
F: FnMut(&Self::Item),
fn by_ref(&mut self) -> &mut Self
where
Self: Sized,
fn collect<B>(self) -> B
where
B: FromIterator<Self::Item>,
Self: Sized,
fn collect_into<E>(self, collection: &mut E) -> &mut E
where
E: Extend<Self::Item>,
Self: Sized,
iter_collect_into
#94780)
fn partition<B, F>(self, f: F) -> (B, B)
where
Self: Sized,
B: Default + Extend<Self::Item>,
F: FnMut(&Self::Item) -> bool,
fn is_partitioned<P>(self, predicate: P) -> bool
where
Self: Sized,
P: FnMut(Self::Item) -> bool,
iter_is_partitioned
#62544)
true
precede all those that return false
. Read more
fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
where
Self: Sized,
F: FnMut(B, Self::Item) -> R,
R: Try<Output = B>,
fn try_for_each<F, R>(&mut self, f: F) -> R
where
Self: Sized,
F: FnMut(Self::Item) -> R,
R: Try<Output = ()>,
fn fold<B, F>(self, init: B, f: F) -> B
where
Self: Sized,
F: FnMut(B, Self::Item) -> B,
fn reduce<F>(self, f: F) -> Option<Self::Item>
where
Self: Sized,
F: FnMut(Self::Item, Self::Item) -> Self::Item,
fn try_reduce<F, R>(
&mut self,
f: F
) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
where
Self: Sized,
F: FnMut(Self::Item, Self::Item) -> R,
R: Try<Output = Self::Item>,
<R as Try>::Residual: Residual<Option<Self::Item>>,
iterator_try_reduce
#87053)
fn all<F>(&mut self, f: F) -> bool
where
Self: Sized,
F: FnMut(Self::Item) -> bool,
fn any<F>(&mut self, f: F) -> bool
where
Self: Sized,
F: FnMut(Self::Item) -> bool,
fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
where
Self: Sized,
P: FnMut(&Self::Item) -> bool,
fn find_map<B, F>(&mut self, f: F) -> Option<B>
where
Self: Sized,
F: FnMut(Self::Item) -> Option<B>,
fn try_find<F, R>(
&mut self,
f: F
) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
where
Self: Sized,
F: FnMut(&Self::Item) -> R,
R: Try<Output = bool>,
<R as Try>::Residual: Residual<Option<Self::Item>>,
try_find
#63178)
fn position<P>(&mut self, predicate: P) -> Option<usize>
where
Self: Sized,
P: FnMut(Self::Item) -> bool,
fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
where
B: Ord,
Self: Sized,
F: FnMut(&Self::Item) -> B,
fn max_by<F>(self, compare: F) -> Option<Self::Item>
where
Self: Sized,
F: FnMut(&Self::Item, &Self::Item) -> Ordering,
fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
where
B: Ord,
Self: Sized,
F: FnMut(&Self::Item) -> B,
fn min_by<F>(self, compare: F) -> Option<Self::Item>
where
Self: Sized,
F: FnMut(&Self::Item, &Self::Item) -> Ordering,
fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
where
FromA: Default + Extend<A>,
FromB: Default + Extend<B>,
Self: Sized + Iterator<Item = (A, B)>,
fn copied<'a, T>(self) -> Copied<Self> โ
where
T: 'a + Copy,
Self: Sized + Iterator<Item = &'a T>,
fn cloned<'a, T>(self) -> Cloned<Self> โ
where
T: 'a + Clone,
Self: Sized + Iterator<Item = &'a T>,
fn cycle(self) -> Cycle<Self> โ
where
Self: Sized + Clone,
fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N> โ
where
Self: Sized,
iter_array_chunks
#100450)
N
elements of the iterator at a time. Read more
fn sum<S>(self) -> S
where
Self: Sized,
S: Sum<Self::Item>,
fn product<P>(self) -> P
where
Self: Sized,
P: Product<Self::Item>,
fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
where
Self: Sized,
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,
iter_order_by
#64295)
Iterator
with those of another with respect to the specified comparison function. Read more
fn partial_cmp<I>(self, other: I) -> Option<Ordering>
where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
Self: Sized,
PartialOrd
elements of this Iterator
with those of another. The comparison works like short-circuit evaluation, returning a result without comparing the remaining elements. As soon as an order can be determined, the evaluation stops and a result is returned. Read more
fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>
where
Self: Sized,
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
iter_order_by
#64295)
Iterator
with those of another with respect to the specified comparison function. Read more
fn eq<I>(self, other: I) -> bool
where
I: IntoIterator,
Self::Item: PartialEq<<I as IntoIterator>::Item>,
Self: Sized,
fn eq_by<I, F>(self, other: I, eq: F) -> bool
where
Self: Sized,
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,
iter_order_by
#64295)
Iterator
are equal to those of another with respect to the specified equality function. Read more
fn ne<I>(self, other: I) -> bool
where
I: IntoIterator,
Self::Item: PartialEq<<I as IntoIterator>::Item>,
Self: Sized,
fn lt<I>(self, other: I) -> bool
where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
Self: Sized,
Iterator
are lexicographically less than those of another. Read more
fn le<I>(self, other: I) -> bool
where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
Self: Sized,
Iterator
are lexicographically less or equal to those of another. Read more
fn gt<I>(self, other: I) -> bool
where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
Self: Sized,
Iterator
are lexicographically greater than those of another. Read more
fn ge<I>(self, other: I) -> bool
where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
Self: Sized,
Iterator
are lexicographically greater than or equal to those of another. Read more
fn is_sorted_by<F>(self, compare: F) -> bool
where
Self: Sized,
F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,
is_sorted
#53485)
fn is_sorted_by_key<F, K>(self, f: F) -> bool
where
Self: Sized,
F: FnMut(Self::Item) -> K,
K: PartialOrd,
is_sorted
#53485)
impl<Idx> PartialEq for RangeFrom<Idx>
where
Idx: PartialEq,
fn eq(&self, other: &RangeFrom<Idx>) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<T> RangeBounds<T> for RangeFrom<&T>
fn start_bound(&self) -> Bound<&T>
fn end_bound(&self) -> Bound<&T>
fn contains<U>(&self, item: &U) -> bool
where
T: PartialOrd<U>,
U: PartialOrd<T> + ?Sized,
impl<T> RangeBounds<T> for RangeFrom<T>
fn start_bound(&self) -> Bound<&T>
fn end_bound(&self) -> Bound<&T>
fn contains<U>(&self, item: &U) -> bool
where
T: PartialOrd<U>,
U: PartialOrd<T> + ?Sized,
impl<T> SliceIndex<[T]> for RangeFrom<usize>
type Output = [T]
fn get(self, slice: &[T]) -> Option<&[T]>
slice_index_methods
)
fn get_mut(self, slice: &mut [T]) -> Option<&mut [T]>
slice_index_methods
)
unsafe fn get_unchecked(self, slice: *const [T]) -> *const [T]
slice_index_methods
)
slice
pointer is undefined behavior even if the resulting reference is not used.
unsafe fn get_unchecked_mut(self, slice: *mut [T]) -> *mut [T]
slice_index_methods
)
slice
pointer is undefined behavior even if the resulting reference is not used.
fn index(self, slice: &[T]) -> &[T]
slice_index_methods
)
fn index_mut(self, slice: &mut [T]) -> &mut [T]
slice_index_methods
)
impl SliceIndex<str> for RangeFrom<usize>
Implements substring slicing with syntax &self[begin ..]
or &mut self[begin ..]
.
Returns a slice of the given string from the byte range [begin
, len
). Equivalent to &self[begin .. len]
or &mut self[begin .. len]
.
This operation is O(1).
Prior to 1.20.0, these indexing operations were still supported by direct implementation of Index
and IndexMut
.
Panics
Panics if begin
does not point to the starting byte offset of a character (as defined by is_char_boundary
), or if begin > len
.
type Output = str
fn get(
self,
slice: &str
) -> Option<&<RangeFrom<usize> as SliceIndex<str>>::Output>
slice_index_methods
)
fn get_mut(
self,
slice: &mut str
) -> Option<&mut <RangeFrom<usize> as SliceIndex<str>>::Output>
slice_index_methods
)
unsafe fn get_unchecked(
self,
slice: *const str
) -> *const <RangeFrom<usize> as SliceIndex<str>>::Output
slice_index_methods
)
slice
pointer is undefined behavior even if the resulting reference is not used.
unsafe fn get_unchecked_mut(
self,
slice: *mut str
) -> *mut <RangeFrom<usize> as SliceIndex<str>>::Output
slice_index_methods
)
slice
pointer is undefined behavior even if the resulting reference is not used.
fn index(self, slice: &str) -> &<RangeFrom<usize> as SliceIndex<str>>::Output โ
slice_index_methods
)
fn index_mut(
self,
slice: &mut str
) -> &mut <RangeFrom<usize> as SliceIndex<str>>::Output โ
slice_index_methods
)
impl<Idx> Eq for RangeFrom<Idx>
where
Idx: Eq,
impl<A> FusedIterator for RangeFrom<A>
where
A: Step,
impl<T> OneSidedRange<T> for RangeFrom<T>
where
RangeFrom<T>: RangeBounds<T>,
impl<Idx> StructuralEq for RangeFrom<Idx>
impl<Idx> StructuralPartialEq for RangeFrom<Idx>
impl<A> TrustedLen for RangeFrom<A>
where
A: TrustedStep,
Auto Trait Implementations
impl<Idx> RefUnwindSafe for RangeFrom<Idx>
where
Idx: RefUnwindSafe,
impl<Idx> Send for RangeFrom<Idx>
where
Idx: Send,
impl<Idx> Sync for RangeFrom<Idx>
where
Idx: Sync,
impl<Idx> Unpin for RangeFrom<Idx>
where
Idx: Unpin,
impl<Idx> UnwindSafe for RangeFrom<Idx>
where
Idx: UnwindSafe,
Blanket Implementations
impl<T> Any for T
where
T: 'static + ?Sized,
impl<T> Borrow<T> for T
where
T: ?Sized,
impl<T> BorrowMut<T> for T
where
T: ?Sized,
impl<T> From<T> for T
fn from(t: T) -> T
Returns the argument unchanged.
impl<T, U> Into<U> for T
where
U: From<T>,
fn into(self) -> U
Calls U::from(self)
.
That is, this conversion is whatever the implementation of From<T> for U
chooses to do.
impl<I> IntoIterator for I
where
I: Iterator,
type Item = <I as Iterator>::Item
type IntoIter = I
fn into_iter(self) -> I
impl<T> ToOwned for T
where
T: Clone,
type Owned = T
fn to_owned(&self) -> T
fn clone_into(&self, target: &mut T)
impl<T, U> TryFrom<U> for T
where
U: Into<T>,
type Error = Infallible
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto<U> for T
where
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
ยฉ 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/ops/struct.RangeFrom.html