Struct std::array::IntoIter 1.51.0[−][src]
pub struct IntoIter<T, const N: usize> { /* fields omitted */ }
Expand description
一个按值的 array 迭代器。
Implementations
👎 Deprecating in 1.59.0: use IntoIterator::into_iter
instead
use IntoIterator::into_iter
instead
在给定的 array
上创建一个新的迭代器。
pub unsafe fn new_unchecked(
buffer: [MaybeUninit<T>; N],
initialized: Range<usize>
) -> IntoIter<T, N>ⓘ
pub unsafe fn new_unchecked(
buffer: [MaybeUninit<T>; N],
initialized: Range<usize>
) -> IntoIter<T, N>ⓘ
在部分初始化的缓冲区中的元素上创建迭代器。
如果您有一个完全初始化的数组,则使用 IntoIterator
。
但这对于从不安全代码中返回部分结果很有用。
Safety
buffer[initialized]
元素必须全部初始化。- 范围必须是规范的,并带有
initialized.start <= initialized.end
。 - 范围必须在缓冲区的边界内,并带有
initialized.end <= N
。 (就像索引[0][100..100]
失败一样,尽管范围为空。)
初始化的元素比提到的多是合理的,尽管这很可能会导致它们被泄露。
Examples
#![feature(array_into_iter_constructors)]
#![feature(maybe_uninit_array_assume_init)]
#![feature(maybe_uninit_uninit_array)]
use std::array::IntoIter;
use std::mem::MaybeUninit;
fn next_chunk<T: Copy, const N: usize>(
it: &mut impl Iterator<Item = T>,
) -> Result<[T; N], IntoIter<T, N>> {
let mut buffer = MaybeUninit::uninit_array();
let mut i = 0;
while i < N {
match it.next() {
Some(x) => {
buffer[i].write(x);
i += 1;
}
None => {
// SAFETY: 我们已经初始化了第一个 `i` 项
unsafe {
return Err(IntoIter::new_unchecked(buffer, 0..i));
}
}
}
}
// SAFETY: 我们已经初始化了所有 N 项
unsafe { Ok(MaybeUninit::array_assume_init(buffer)) }
}
let r: [_; 4] = next_chunk(&mut (10..16)).unwrap();
assert_eq!(r, [10, 11, 12, 13]);
let r: IntoIter<_, 40> = next_chunk(&mut (10..16)).unwrap_err();
assert_eq!(r.collect::<Vec<_>>(), vec![10, 11, 12, 13, 14, 15]);
Run在 T
上创建一个迭代器,该迭代器不返回任何元素。
如果您只需要一个空的迭代器,请使用 iter::empty()
。
如果您需要一个空数组,请使用 []
。
但是当您需要 array::IntoIter<T, N>
时,这非常有用。
Examples
#![feature(array_into_iter_constructors)]
use std::array::IntoIter;
let empty = IntoIter::<i32, 3>::empty();
assert_eq!(empty.len(), 0);
assert_eq!(empty.as_slice(), &[]);
let empty = IntoIter::<std::convert::Infallible, 200>::empty();
assert_eq!(empty.len(), 0);
Run[1, 2].into_iter()
和 [].into_iter()
有不同的类型
#![feature(array_into_iter_constructors)]
use std::array::IntoIter;
pub fn get_bytes(b: bool) -> IntoIter<i8, 4> {
if b {
[1, 2, 3, 4].into_iter()
} else {
[].into_iter() // error[E0308]: 类型不匹配
}
}
但是,使用此方法您可以得到一个适当大小的空迭代器:
#![feature(array_into_iter_constructors)]
use std::array::IntoIter;
pub fn get_bytes(b: bool) -> IntoIter<i8, 4> {
if b {
[1, 2, 3, 4].into_iter()
} else {
IntoIter::empty()
}
}
assert_eq!(get_bytes(true).collect::<Vec<_>>(), vec![1, 2, 3, 4]);
assert_eq!(get_bytes(false).collect::<Vec<_>>(), vec![]);
Run返回尚未产生的所有元素的不可变切片。
Trait Implementations
从迭代器的末尾删除并返回一个元素。 Read more
这是 Iterator::try_fold()
的反向版本:它从迭代器的后面开始接收元素。 Read more
一种迭代器方法,从后面开始,将迭代器的元素减少为单个最终值。 Read more
type Item = T
type Item = T
被迭代的元素的类型。
通过应用操作将每个元素 fold
到一个累加器中,返回最终结果。 Read more
创建一个从同一点开始的迭代器,但在每次迭代时以给定的数量逐步执行。 Read more
接受两个迭代器,并依次在两个迭代器上创建一个新的迭代器。 Read more
将两个迭代器压缩为成对的单个迭代器。 Read more
fn intersperse(self, separator: Self::Item) -> Intersperse<Self>ⓘNotable traits for Intersperse<I>impl<I> Iterator for Intersperse<I> where
I: Iterator,
<I as Iterator>::Item: Clone, type Item = <I as Iterator>::Item;
where
Self::Item: Clone,
fn intersperse(self, separator: Self::Item) -> Intersperse<Self>ⓘNotable traits for Intersperse<I>impl<I> Iterator for Intersperse<I> where
I: Iterator,
<I as Iterator>::Item: Clone, type Item = <I as Iterator>::Item;
where
Self::Item: Clone,
impl<I> Iterator for Intersperse<I> where
I: Iterator,
<I as Iterator>::Item: Clone, type Item = <I as Iterator>::Item;
创建一个新的迭代器,该迭代器将 separator
的副本放置在原始迭代器的相邻项之间。 Read more
fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>ⓘNotable traits for IntersperseWith<I, G>impl<I, G> Iterator for IntersperseWith<I, G> where
I: Iterator,
G: FnMut() -> <I as Iterator>::Item, type Item = <I as Iterator>::Item;
where
G: FnMut() -> Self::Item,
fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>ⓘNotable traits for IntersperseWith<I, G>impl<I, G> Iterator for IntersperseWith<I, G> where
I: Iterator,
G: FnMut() -> <I as Iterator>::Item, type Item = <I as Iterator>::Item;
where
G: FnMut() -> Self::Item,
impl<I, G> Iterator for IntersperseWith<I, G> where
I: Iterator,
G: FnMut() -> <I as Iterator>::Item, type Item = <I as Iterator>::Item;
创建一个新的迭代器,该迭代器将 separator
生成的项放在原始迭代器的相邻项之间。 Read more
获取一个闭包并创建一个迭代器,该迭代器在每个元素上调用该闭包。 Read more
创建一个迭代器,该迭代器使用闭包确定是否应产生元素。 Read more
创建一个同时过滤和映射的迭代器。 Read more
创建一个迭代器,该迭代器给出当前迭代次数以及下一个值。 Read more
创建一个迭代器,该迭代器根据谓词产生元素。 Read more
创建一个迭代器,该迭代器均基于谓词和映射生成元素。 Read more
创建一个跳过前 n
个元素的迭代器。 Read more
创建一个迭代器,它产生第一个 n
元素,如果底层迭代器提前结束,则产生更少的元素。 Read more
创建一个迭代器,其工作方式类似于 map,但它会将嵌套的结构展平。 Read more
创建一个可简化嵌套结构体的迭代器。 Read more
对迭代器的每个元素执行某些操作,将值传递给它。 Read more
将迭代器转换为集合。 Read more
消耗一个迭代器,从中创建两个集合。 Read more
fn partition_in_place<'a, T, P>(self, predicate: P) -> usize where
T: 'a,
Self: DoubleEndedIterator<Item = &'a mut T>,
P: FnMut(&T) -> bool,
fn partition_in_place<'a, T, P>(self, predicate: P) -> usize where
T: 'a,
Self: DoubleEndedIterator<Item = &'a mut T>,
P: FnMut(&T) -> bool,
根据给定的谓词,对迭代器的元素进行就地重新排序,以使所有返回 true
的元素都在所有返回 false
的元素之前。
返回找到的 true
元素的数量。 Read more
一个迭代器方法,它只要成功返回就应用函数,并产生单个最终值。 Read more
一个迭代器方法,该方法将一个容易犯错的函数应用于迭代器中的每个项,在第一个错误处停止并返回该错误。 Read more
通过重复应用缩减操作,将元素缩减为一个。 Read more
测试迭代器的每个元素是否与谓词匹配。 Read more
测试迭代器的任何元素是否与谓词匹配。 Read more
搜索满足谓词的迭代器的元素。 Read more
将函数应用于迭代器的元素,并返回第一个非 None 的结果。 Read more
在迭代器中搜索元素,并返回其索引。 Read more
1.0.0[src]fn rposition<P>(&mut self, predicate: P) -> Option<usize> where
P: FnMut(Self::Item) -> bool,
Self: ExactSizeIterator + DoubleEndedIterator,
fn rposition<P>(&mut self, predicate: P) -> Option<usize> where
P: FnMut(Self::Item) -> bool,
Self: ExactSizeIterator + DoubleEndedIterator,
从右侧搜索迭代器中的元素,并返回其索引。 Read more
返回给出指定函数最大值的元素。 Read more
返回给出相对于指定比较函数的最大值的元素。 Read more
返回给出指定函数中最小值的元素。 Read more
返回给出相对于指定比较函数的最小值的元素。 Read more
反转迭代器的方向。 Read more
将成对的迭代器转换为一对容器。 Read more
创建一个迭代器,该迭代器将复制其所有元素。 Read more
创建一个迭代器,该迭代器将克隆所有元素。 Read more
不断重复的迭代器。 Read more
fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering where
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,
fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering where
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,
1.5.0[src]fn partial_cmp<I>(self, other: I) -> Option<Ordering> where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
fn partial_cmp<I>(self, other: I) -> Option<Ordering> where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering> where
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering> where
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
1.5.0[src]fn eq<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialEq<<I as IntoIterator>::Item>,
fn eq<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialEq<<I as IntoIterator>::Item>,
fn eq_by<I, F>(self, other: I, eq: F) -> bool where
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,
fn eq_by<I, F>(self, other: I, eq: F) -> bool where
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,
1.5.0[src]fn ne<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialEq<<I as IntoIterator>::Item>,
fn ne<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialEq<<I as IntoIterator>::Item>,
1.5.0[src]fn lt<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
fn lt<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
1.5.0[src]fn le<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
fn le<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
1.5.0[src]fn gt<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
fn gt<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
1.5.0[src]fn ge<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
fn ge<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
fn is_sorted_by_key<F, K>(self, f: F) -> bool where
F: FnMut(Self::Item) -> K,
K: PartialOrd<K>,
fn is_sorted_by_key<F, K>(self, f: F) -> bool where
F: FnMut(Self::Item) -> K,
K: PartialOrd<K>,
检查此迭代器的元素是否使用给定的键提取函数进行排序。 Read more