2个版本
0.1.1 | 2021年11月27日 |
---|---|
0.1.0 | 2021年11月25日 |
#1785 in 数据结构
28,509 每月下载量
用于 38 个crate (3 直接)
21KB
450 行
Inplace-Vec-Builder
一个小型库,可以从自身构建Vec或SmallVec而不进行分配。
这在编写不进行分配的原地操作时非常有用。
想象你有一个包含一些数字的vec。你现在想对这些元素应用一些变换,比如映射、过滤、添加一些元素,然后将结果存储在同一个地方。
最简单的方法可能是这样的
let mut res = self
.elements
.iter()
.filter(|x| **x > 5)
.map(|x| *x * 2)
.chain(std::iter::once(123))
.collect();
std::mem::swap(&mut self.elements, &mut res);
但这会分配一个新的向量。通常不是大问题,但如果这是一些非常频繁使用的代码,你想要避免它。
请注意,在许多同时进行过滤和变换的情况下,可以使用retain。如果是这种情况,使用retain当然是首选。
这个crate提供了一个助手,允许在不进行分配的情况下执行类似上面的操作。它相当底层,因为它打算被其他库使用。
let mut t = InPlaceVecBuilder::from(&mut self.elements);
while let Some(elem) = t.pop_front() {
if elem > 5 {
t.push(elem * 2);
}
}
t.push(123);
功能
- stdvec (默认): std Vec支持
- smallvec: SmallVec支持
依赖关系
~19KB