diff options
| -rw-r--r-- | src/libcollections/vec.rs | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/libcollections/vec.rs b/src/libcollections/vec.rs index 341d91538ad..cebde59634b 100644 --- a/src/libcollections/vec.rs +++ b/src/libcollections/vec.rs @@ -1386,7 +1386,17 @@ impl<T> FromIterator<T> for Vec<T> { fn from_iter<I:Iterator<Item=T>>(iterator: I) -> Vec<T> { 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 |
