Trait std::iter::TrustedLen
source · pub unsafe trait TrustedLen: Iterator { }
🔬This is a nightly-only experimental API. (
trusted_len
#37572)Expand description
一个使用 size_hint 报告准确长度的迭代器。
迭代器报告一个大小提示,该提示要么是精确的 (下限等于上限),要么上限是 None
。
如果实际的迭代器长度大于 usize::MAX
,则上限必须仅为 None
。在这种情况下,下限必须是 usize::MAX
,导致 (usize::MAX, None)
的 Iterator::size_hint()
。
迭代器必须精确地生成它所报告或发散的元素数量,然后才能结束。
什么时候不应该适配器是 TrustedLen
?
如果适配器使迭代器短给定数量,那么该适配器实现 TrustedLen
通常是不正确的。
内部迭代器返回的可能多于 usize::MAX
项,但没有办法知道 k
小于该项的元素是多少,因为来自内部迭代器的 size_hint
已经饱和并丢失了该信息。
这就是 Skip<I>
不是 TrustedLen
的原因,即使 I
实现了 TrustedLen
。
Safety
只有在遵守契约的情况下才能实现 trait。这个 trait 的使用者必须检查 Iterator::size_hint ()
的上限。