diff --git a/src/lib.rs b/src/lib.rs index 74c8848..b7c9292 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -893,22 +893,16 @@ impl Clone for ArrayVec fn clone_from(&mut self, rhs: &Self) { // recursive case for the common prefix let prefix = cmp::min(self.len(), rhs.len()); - { - let a = &mut self[..prefix]; - let b = &rhs[..prefix]; - for i in 0..prefix { - a[i].clone_from(&b[i]); - } - } + self[..prefix].clone_from_slice(&rhs[..prefix]); + if prefix < self.len() { // rhs was shorter for _ in 0..self.len() - prefix { self.pop(); } } else { - for elt in &rhs[self.len()..] { - self.push(elt.clone()); - } + let rhs_elems = rhs[self.len()..].iter().cloned(); + self.extend(rhs_elems); } } }