Expand description
Cursor-like helper which allows removing elements from vector without moving the tail every time.
§Vec::remove
comparison
If you’ll use common Vec::remove
to remove only some elements starting
from the head, you’ll have bad times because it will copy a lot of elements:
vec's memory: [0, 1, 2, 3, 4]
> vec.remove(0);
vec's memory: [-, 1, 2, 3, 4]
vec's memory: [1, 2, 3, 4, -] // copy of 4 elements (the whole tail)
> vec.remove(1);
vec's memory: [1, -, 3, 4, -]
vec's memory: [1, 3, 4, -, -] // copy of 2 elements
> vec.remove(2);
vec's memory: [1, 3, -, -, -]
Whereas Removing
uses swap
s:
vec's memory: [0, 1, 2, 3, 4]
rem's ptr: ^
> let rem = vec.removing();
> rem.next().unwrap().remove();
vec's memory: [-, 1, 2, 3, 4]
rem's ptr: ^
> rem.next().unwrap();
vec's memory: [1, -, 2, 3, 4] // one copy of 1
rem's ptr: ^
> rem.next().unwrap().remove();
vec's memory: [1, -, -, 3, 4]
rem's ptr: ^
> rem.next().unwrap();
vec's memory: [1, 3, -, -, 4] // one copy of 3
rem's ptr: ^
> rem.next().unwrap().remove();
vec's memory: [1, 3, -, -, -]
§no_std support
This crate supports #![no_std]
but requires alloc
(we are working with
vec after all)
Structs§
- Vec entry.
- A cursor-like structure made for cheap iterative removing of elements from vector.