#array #stack #vec #utils

nightly upto

固定容量和可变长度栈分配数组

3个版本

0.1.5 2024年1月1日
0.1.4 2023年12月28日
0.1.3 2023年12月28日

#2443数据结构

每月 25 下载

MIT/Apache

24KB
458

UpTo

固定容量可变长度栈分配数组

何时使用UpTo

当你知道向量需要的最大容量,但又不想一次性分配全部时,UpTo是最适合的。最好保持UpTo的容量相对较小。如果你需要一个高容量的容器,请直接使用Vec。

安全性

此crate大量使用std::mem::MaybeUninit<T>。UpTo类型在内部是一个[MaybeUninit<T>; N]。从MaybeUninit读取是固有的不安全的,但我们可以保证安全性,因为任何小于UpTo.len的索引处的值都是已知的。

示例

use upto::{UpTo, upto};

// allocate an array with capacity 5.
let mut upto: UpTo<5, i32> = UpTo::new();

// push values.
upto.push(720);
upto.push(1080);
upto.push(1440);
upto.push(2160);

// Iter & IterMut
// output: "720, 1080, 1440, 2160"
for v in upto.iter() {
    println!("{v}, ")
}

for v in upto.iter_mut() {
    *v += 144;
}

// Remove & Insert values.
upto.remove(3);
upto.insert(540, 0);

// Index & IndexMut.
println!("{}", upto[3]);
upto[2] += 144;

// First (try_first_mut, try_first, first, first_mut)
if let Some(v) = upto.try_first() {
    println!("{v}")
}

// Last (try_last_mut, try_last, last, last_mut)
if let Some(v) = upto.try_last_mut() {
    *v += 144;
}

// Pop
while let Some(v) = upto.pop() {
    println!("{v}")
}

无运行时依赖