本文简要介绍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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。