1 个不稳定版本
0.1.0 | 2021年1月7日 |
---|
#334 在 无标准库
1,276 每月下载量
在 6 个 crates 中使用(2 个直接使用)
19KB
270 行
vecrem
类似于游标的辅助工具,允许在不需要每次移动尾部的情况下从向量中删除元素。
[dependencies]
vecrem = "0.1"
编译器支持:需要 rustc 1.36+
lib.rs
:
类似于游标的辅助工具,允许在不需要每次移动尾部的情况下从向量中删除元素。
Vec::remove
比较操作
如果你将使用常见的 Vec::remove
仅从头部删除一些元素,那么你将遇到困难,因为它将复制大量元素
vec's memory: [0, 1, 2, 3, 4]
> vec.remove(0);
vec's memory: [-, 1, 2, 3, 4]
vec's memory: [1, 2, 3, 4, -] // copy of 4 elements (the whole tail)
> vec.remove(1);
vec's memory: [1, -, 3, 4, -]
vec's memory: [1, 3, 4, -, -] // copy of 2 elements
> vec.remove(2);
vec's memory: [1, 3, -, -, -]
而 Removing
使用 swap
vec's memory: [0, 1, 2, 3, 4]
rem's ptr: ^
> let rem = vec.removing();
> rem.next().unwrap().remove();
vec's memory: [-, 1, 2, 3, 4]
rem's ptr: ^
> rem.next().unwrap();
vec's memory: [1, -, 2, 3, 4] // one copy of 1
rem's ptr: ^
> rem.next().unwrap().remove();
vec's memory: [1, -, -, 3, 4]
rem's ptr: ^
> rem.next().unwrap();
vec's memory: [1, 3, -, -, 4] // one copy of 3
rem's ptr: ^
> rem.next().unwrap().remove();
vec's memory: [1, 3, -, -, -]
支持 no_std
此 crate 支持 #![no_std]
但需要 alloc
(毕竟我们在处理 vec)