diff --git a/src/libcollections/vec.rs b/src/libcollections/vec.rs index 1cd2a89ad604e..7c7d783d129fb 100644 --- a/src/libcollections/vec.rs +++ b/src/libcollections/vec.rs @@ -1380,7 +1380,17 @@ impl FromIterator for Vec { fn from_iter>(iterator: I) -> Vec { let (lower, _) = iterator.size_hint(); let mut vector = Vec::with_capacity(lower); - for element in iterator { + + let mut i = iterator.fuse(); + for element in i.by_ref().take(vector.capacity()) { + let len = vector.len(); + unsafe { + ptr::write(vector.get_unchecked_mut(len), element); + vector.set_len(len + 1); + } + } + + for element in i { vector.push(element) } vector