100 exercises to learn Rust
This commit is contained in:
25
book/src/06_ticket_management/03_resizing.md
Normal file
25
book/src/06_ticket_management/03_resizing.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# 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?
|
||||
|
||||
```rust
|
||||
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.
|
||||
Reference in New Issue
Block a user