當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。