diff --git a/src/libcore/iter/mod.rs b/src/libcore/iter/mod.rs index 06c29b47bf921..6b55c4dc5e2f1 100644 --- a/src/libcore/iter/mod.rs +++ b/src/libcore/iter/mod.rs @@ -645,6 +645,20 @@ impl Iterator for Cycle where I: Clone + Iterator { } } +#[stable(feature = "rust1", since = "1.0.0")] +impl Iterator for Cycle +where I: Clone + ExactSizeIterator, I::Item : Copy { + fn nth(&mut self, n: usize) -> Option<::Item> { + let cur_len = self.iter.len(); + if n < cur_len { + self.iter.nth(n) + } else { + self.iter = self.orig.clone(); + self.iter.nth((n - cur_len) % self.orig.len()) + } + } +} + #[unstable(feature = "fused", issue = "35602")] impl FusedIterator for Cycle where I: Clone + Iterator {}