`Vec::with_capacity` in Rust
At first, I assumed since we’ve declared the capacity upfront, it would be maximum capacity of the Vec
Turns out, since Vec
is expected to shrink and grow, as needed, there is no maximum capacity for Vec
It just ensures that “sufficient” memory is allocated to the Vec
, such that memory reallocation is not required.
On the other hand, if you need more that what you declared with with_capacity
, you will get it, but there will need
to be reallocation (of memory), so it will be inefficient.
I was surprised when the following code worked (I had expected panic
when my_vec
had more than declared capacity)
fn main() {
let mut my_vector: Vec<i32> = Vec::with_capacity(1);
println!("{:?}", my_vector);
my_vector.push(1);
my_vector.push(2);
my_vector.push(3);
my_vector.push(4);
println!("{:?}", my_vector);
}
This code produced the following output
[]
[1, 2, 3, 4]
with_capacity
is useful when you know upfront your memory requirement. This avoids reallocation.
It provides an efficient operation when the programmer knows what to expect.