Rust "random access"迭代器



我想为实现允许通过索引访问项的trait的对象编写一个迭代器。像这样:

trait Collection {
fn get_item(&self, index: usize) -> &Item;
fn get_item_mut(&mut self, index: usize) -> &mut Item;
}

我知道如何实现IterIterMutnext()函数。我的问题是我需要实现哪些其他Iterator方法来使迭代器尽可能高效。我的意思是,例如,nth()直接到项目,不调用next(),直到它到达它。我想知道我需要实现的最小函数量,才能使它像切片迭代器一样快。

我已经在谷歌上搜索过了,但是找不到任何关于这个话题的具体内容。

在夜间,您可以实现advance_by()。这将为您提供一个有效的免费nth(),以及在标准库中使用它的其他代码。

在稳定状态下,您需要实现nth()。当然还有ExactSizeIteratorsize_hint()。为了获得额外的性能,你也可以在夜间实现TrustedLen,允许collect::<Vec<_>>()利用产生的项目数量得到保证的事实。

不幸的是,你永远不可能像切片迭代器那样高效,因为它们实现了各种std私有trait(例如TrustedRandomAccess),而libstd使用这些trait进行各种专一化,以使它们在各种情况下更高效。

相关内容

  • 没有找到相关文章

最新更新