diff --git a/src/libcollections/vec.rs b/src/libcollections/vec.rs index 341d91538adb..cebde59634b3 100644 --- a/src/libcollections/vec.rs +++ b/src/libcollections/vec.rs @@ -1386,7 +1386,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