当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust ExactSizeIterator用法及代码示例


本文简要介绍rust语言中 Trait std::iter::ExactSizeIterator 的用法。

用法

pub trait ExactSizeIterator: Iterator {
    fn len(&self) -> usize { ... }
    fn is_empty(&self) -> bool { ... }
}

一个知道其确切长度的迭代器。

许多 Iterator 不知道它们将迭代多少次,但有些知道。如果迭代器知道它可以迭代多少次,那么提供对该信息的访问可能会很有用。例如,如果你想向后迭代,一个好的开始是知道结束在哪里。

当实施一个ExactSizeIterator,你还必须实现std::iter::Iterator.这样做时,执行std::iter::Iterator.size_hint 必须返回迭代器的确切大小。

len 方法有一个默认实现,因此您通常不应该实现它。但是,您可能能够提供比默认实现更高性能的实现,因此在这种情况下覆盖它是有意义的。

请注意,此特征是一个安全特征,因此不是不能保证返回的长度正确。这意味着unsafe代码禁止依赖正确性std::iter::Iterator.size_hint.不稳定和不安全TrustedLentrait 提供了这个额外的保证。

例子

基本用法:

// a finite range knows exactly how many times it will iterate
let five = 0..5;

assert_eq!(5, five.len());

module-level docs中,我们实现了 Iterator Counter。让我们也为其实现ExactSizeIterator

impl ExactSizeIterator for Counter {
    // We can easily calculate the remaining number of iterations.
    fn len(&self) -> usize {
        5 - self.count
    }
}

// And now we can use it!

let counter = Counter::new();

assert_eq!(5, counter.len());

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Trait std::iter::ExactSizeIterator。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。