Expand description
AppendOnlyVec
This is a pretty simple type, which is a vector that you can push into, but cannot modify the elements of. The data structure never moves an element once allocated, so you can push to the vec even while holding references to elements that have already been pushed.
§Scaling
-
Accessing an element is O(1), but slightly more expensive than for a standard
Vec
. -
Pushing a new element amortizes to O(1), but may require allocation of a new chunk.
§Example
use append_only_vec::AppendOnlyVec;
static V: AppendOnlyVec<String> = AppendOnlyVec::<String>::new();
let mut threads = Vec::new();
for thread_num in 0..10 {
threads.push(std::thread::spawn(move || {
for n in 0..100 {
let s = format!("thread {} says {}", thread_num, n);
let which = V.push(s.clone());
assert_eq!(&V[which], &s);
}
}));
}
for t in threads {
t.join();
}
assert_eq!(V.len(), 1000);
Structs§
- Append
Only Vec - Into
Iter - An
Iterator
for the values contained in theAppendOnlyVec