diff options
| author | AngelicosPhosphoros <xuzin.timur@gmail.com> | 2021-12-20 23:58:45 +0300 |
|---|---|---|
| committer | Mark Rousskov <mark.simulacrum@gmail.com> | 2022-01-19 09:47:49 -0500 |
| commit | ea570c689cf5dfb07f39853cc26701f382dff9a6 (patch) | |
| tree | fb0164fc0ae5f491754860891961d77d4b3122e7 /library/alloc/src/vec | |
| parent | 2f004d2d401682e553af3984ebd9a3976885e752 (diff) | |
| download | rust-ea570c689cf5dfb07f39853cc26701f382dff9a6.tar.gz rust-ea570c689cf5dfb07f39853cc26701f382dff9a6.zip | |
Improve estimation of capacity in Vec::from_iter
Closes #48994
Diffstat (limited to 'library/alloc/src/vec')
| -rw-r--r-- | library/alloc/src/vec/spec_from_iter_nested.rs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/library/alloc/src/vec/spec_from_iter_nested.rs b/library/alloc/src/vec/spec_from_iter_nested.rs index 948cf044197..f915ebb86e5 100644 --- a/library/alloc/src/vec/spec_from_iter_nested.rs +++ b/library/alloc/src/vec/spec_from_iter_nested.rs @@ -1,5 +1,8 @@ +use core::cmp; use core::iter::TrustedLen; -use core::ptr::{self}; +use core::ptr; + +use crate::raw_vec::RawVec; use super::{SpecExtend, Vec}; @@ -24,8 +27,11 @@ where None => return Vec::new(), Some(element) => { let (lower, _) = iterator.size_hint(); - let mut vector = Vec::with_capacity(lower.saturating_add(1)); + let initial_capacity = + cmp::max(RawVec::<T>::MIN_NON_ZERO_CAP, lower.saturating_add(1)); + let mut vector = Vec::with_capacity(initial_capacity); unsafe { + // SAFETY: We requested capacity at least 1 ptr::write(vector.as_mut_ptr(), element); vector.set_len(1); } |
