Expand description
§Utilities for the nested vector
If you think of using is crate, think again. Generally speaking, Vec<Vec<T>>
is an antipattern because it is not contiguous -> not cache friendly -> slow. Nearly always, for the buffer you can and should use a newtype arround small_vec::SmallVec
or Vec<T>
, if possible. For example, if you have a dynamically-sized matrix, you should use the chosen contiguous buffer and maybe some data for dimensions.
However, if you believe that you have a legitimate use case for a nested vector, this crate provides a PoppingIterator
, LendingIter
, and LendingIterMut
that you might want to use.
§Example
use vec_vec::VecVecExt;
fn main() {
let mut v = vec![vec![2, 3, 5], vec![], vec![7, 11, 13]];
let mut iter = v.popping_iter();
assert_eq!(iter.next(), Some(13));
drop(iter);
assert_eq!(v, vec![vec![2, 3, 5], vec![], vec![7, 11]]);
let mut iter = v.popping_iter();
assert_eq!(iter.next(), Some(11));
assert_eq!(iter.container(), &vec![vec![2, 3, 5], vec![], vec![7]]);
assert_eq!(iter.next(), Some(7));
assert_eq!(iter.container(), &vec![vec![2, 3, 5], vec![], vec![]]);
assert_eq!(iter.next(), Some(5));
assert_eq!(iter.container(), &vec![vec![2, 3]]);
assert_eq!(iter.next(), Some(3));
assert_eq!(iter.container(), &vec![vec![2]]);
assert_eq!(iter.next(), Some(2));
assert_eq!(iter.container(), &vec![vec![]]);
assert_eq!(iter.next(), None);
assert_eq!(iter.container(), &Vec::<Vec<_>>::new());
}
§Also see
stack-trait
for the stack trait with entry API, which is useful to avoid the limitations of the pre-Polonius NLL borrow checker.
Structs§
- Lending
Iter - A lending iterator over the entries of a
Vec<Vec<T>>
. In this case, entry implies that it can be dereferenced either as a shared or a mutable reference. - Lending
Iter Mut - A lending iterator over the mutable references to the elements of a
Vec<Vec<T>>
. - Popping
Iter - An iterator over the items of a
Vec<Vec<T>>
that pops the elements of the innerVec
s from the back. - Trivial
Last Entry
Traits§
- VecVec
Ext - An extension trait for
Vec<Vec<T>>
.