2个版本

0.1.1 2021年11月27日
0.1.0 2021年11月25日

#1785 in 数据结构

Download history 7655/week @ 2024-03-14 8073/week @ 2024-03-21 8881/week @ 2024-03-28 8855/week @ 2024-04-04 9806/week @ 2024-04-11 8948/week @ 2024-04-18 8574/week @ 2024-04-25 8686/week @ 2024-05-02 7380/week @ 2024-05-09 7596/week @ 2024-05-16 5990/week @ 2024-05-23 7970/week @ 2024-05-30 8421/week @ 2024-06-06 6710/week @ 2024-06-13 5780/week @ 2024-06-20 5913/week @ 2024-06-27

28,509 每月下载量
用于 38 个crate (3 直接)

MIT/Apache

21KB
450

Inplace-Vec-Builder

一个小型库,可以从自身构建VecSmallVec而不进行分配。

这在编写不进行分配的原地操作时非常有用。

想象你有一个包含一些数字的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