本文簡要介紹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.不穩定和不安全TrustedLen
trait 提供了這個額外的保證。
例子
基本用法:
// 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 ExactSizeIterator.is_empty用法及代碼示例
- Rust ExactSizeIterator.len用法及代碼示例
- Rust ExitStatus.code用法及代碼示例
- Rust Extend.extend用法及代碼示例
- Rust ExitStatusError.code用法及代碼示例
- Rust ExitStatusError用法及代碼示例
- Rust ExitStatus.exit_ok用法及代碼示例
- Rust ExitStatus.success用法及代碼示例
- Rust Extend用法及代碼示例
- Rust ExitStatusError.code_nonzero用法及代碼示例
- Rust Entry.or_insert_with用法及代碼示例
- Rust Error.source用法及代碼示例
- Rust Eq用法及代碼示例
- Rust Error.last_os_error用法及代碼示例
- Rust Entry.or_insert用法及代碼示例
- Rust Entry.and_modify用法及代碼示例
- Rust Error.chain用法及代碼示例
- Rust Error.description用法及代碼示例
- Rust Error.kind用法及代碼示例
- Rust Entry.or_insert_with_key用法及代碼示例
- Rust Entry.key用法及代碼示例
- Rust Entry.or_default用法及代碼示例
- Rust Error.from_raw_os_error用法及代碼示例
- Rust Entry.insert用法及代碼示例
- Rust Error.get_ref用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 Trait std::iter::ExactSizeIterator。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。