#vec #elements #insert #removal #multiple #time #mutation

无 std scanmut

在 O(n) 时间复杂度内从 Vecs 中插入/删除多个项目

2 个不稳定版本

0.2.0 2021 年 1 月 19 日
0.1.0 2019 年 12 月 1 日

#1022 in Rust 模式

MIT 许可证

41KB
836

scanmut

在 O(n) 时间复杂度内向 Vec 插入或删除多个元素。

此软件包提供了两种类型用于灵活高效的 Vec 模式;Inserter 和 Remover。这两种类型可以看作是对 Vec::insert 和 Vec::drain 的更通用的实现,允许你例如高效地插入切片,条件性地删除元素,或在删除元素的同时访问 Vec 的元素。

Inserter 和 Remover 需要插入和删除索引的顺序;Inserter 为单调不增,Remover 为单调递增。

为了方便,还有一些扩展特质,通过 Inserter 和 Remover 添加常见的高级操作。请参阅 ScanMut、InsertSliceClone 和 InsertSliceCopy。

示例

使用 ScanMut::insert_all 将切片插入到 vec 中

use scanmut::prelude::*;

let mut v = vec!['a', 'b', 'c'];
v.insert_all(1, ['d', 'e'].iter().cloned());
assert_eq!(v, vec!['a', 'd', 'e', 'b', 'c']);

使用 ScanMut::multi_remove 在一次扫描中删除多个元素

use scanmut::prelude::*;

let mut v = vec!['a', 'b', 'c'];
v.multi_remove([0, 2].iter().cloned(), drop);
assert_eq!(v, vec!['b']);

许可证:MIT

无运行时依赖