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 () 的上限。