74 个版本
0.11.9 | 2022 年 9 月 30 日 |
---|---|
0.11.7 | 2022 年 7 月 24 日 |
0.11.4 | 2022 年 3 月 24 日 |
0.11.0 | 2021 年 12 月 24 日 |
0.1.6 |
|
#1736 在 数据结构
50 每月下载量
在 7 个 包中使用(直接使用 4 个)
295KB
5K SLoC
实现了一个基于数组的固定容量 Vec
替代方案,使用 const generics。
注意:这里的“static”是指传统意义上的“不变的”或“非动态”。
此包不使用字面量 static
变量用于任何东西(但提供多种方法来实例化 StaticVec
作为 static
或 const
变量,如果需要的话)。
通过在您的 Cargo.toml
中将 staticvec
依赖项的 default-features = false
设置为 false
,与 no_std
兼容(几乎无功能损失)。
通过激活 serde
包的特性,可选地支持 StaticVec
结构体的序列化和反序列化。
StaticVec
还实现了 Deref
和 DerefMut
到 [T]
,这意味着可以通过它的实例访问所有现有的切片方法,并且可以在期望 [T]
的上下文中使用对其的引用。
截至版本 0.8.0,此包还提供了一个固定容量的 StaticString
结构体,它基于 StaticVec<u8, N>
的一个实例构建。
截至版本0.8.5,基于标准库BinaryHeap
和围绕一个StaticVec<T, N>
实例构建的固定容量StaticHeap
结构体也已添加。
欢迎贡献/建议等!
最低支持的Rust版本:由于使用了提供功能超出稳定最小子集(如min_const_generics
和min_const_fn
)范围的各个功能门,目前这是一个仅限nightly的crate。
基本使用示例
use staticvec::{staticvec, StaticVec};
fn main() {
let mut v = StaticVec::<usize, 64>::new();
for i in 0..v.capacity() {
v.push(i);
}
for i in &v {
println!("{}", i);
}
v.clear();
v.insert(0, 47);
v.insert(1, 48);
v.insert(2, 49);
v.insert(v.len() - 1, 50);
v.insert(v.len() - 2, 51);
v.insert(v.len() - 3, 52);
for i in &v {
println!("{}", i);
}
for i in &v.reversed().drain(2..4) {
println!("{}", i);
}
while v.is_not_empty() {
println!("{}", v.remove(0));
}
for f in staticvec![12.0, 14.0, 15.0, 16.0].iter().skip(2) {
println!("{}", f);
}
for i in staticvec![
staticvec![14, 12, 10].sorted(),
staticvec![20, 18, 16].reversed(),
staticvec![26, 24, 22].sorted(),
staticvec![32, 30, 28].reversed(),
]
.iter()
.flatten()
.collect::<StaticVec<usize, 12>>()
.iter() {
println!("{}", i);
}
// The type parameter is inferred as `StaticVec<usize, 16>`.
let filled = StaticVec::<_, 6>::filled_with_by_index(|i| {
staticvec![
i + 1,
i + 2,
i + 3,
i + 4,
]
.concat(&staticvec![6, 6, 7, 7])
.intersperse((i + 4) * 4)
});
println!("{:?}", filled);
}
许可证
依赖项
~0–265KB