Resizing
We said that Vec
is a "growable" vector type, but what does that mean?
What happens if you try to insert an element into a Vec
that's already at maximum capacity?
#![allow(unused)] fn main() { let mut numbers = Vec::with_capacity(3); numbers.push(1); numbers.push(2); numbers.push(3); // Max capacity reached numbers.push(4); // What happens here? }
The Vec
will resize itself.
It will ask the allocator for a new (larger) chunk of heap memory, copy the elements over, and deallocate the old memory.
This operation can be expensive, as it involves a new memory allocation and copying all existing elements.
Vec::with_capacity
If you have a rough idea of how many elements you'll store in a Vec
, you can use the Vec::with_capacity
method to pre-allocate enough memory upfront.
This can avoid a new allocation when the Vec
grows, but it may waste memory if you overestimate actual usage.
Evaluate on a case-by-case basis.
Exercise
The exercise for this section is located in 06_ticket_management/03_resizing