#vec #remove #drain #vector

无 std vecrem

用于从 vec 中快速迭代删除元素的类似于游标的结构

1 个不稳定版本

0.1.0 2021年1月7日

#334无标准库

Download history 207/week @ 2024-04-06 307/week @ 2024-04-13 291/week @ 2024-04-20 250/week @ 2024-04-27 375/week @ 2024-05-04 375/week @ 2024-05-11 335/week @ 2024-05-18 461/week @ 2024-05-25 273/week @ 2024-06-01 353/week @ 2024-06-08 301/week @ 2024-06-15 382/week @ 2024-06-22 283/week @ 2024-06-29 203/week @ 2024-07-06 288/week @ 2024-07-13 444/week @ 2024-07-20

1,276 每月下载量
6 crates 中使用(2 个直接使用)

自定义许可

19KB
270

vecrem

CI status documentation (master) documentation (docs.rs) crates.io LICENSE

类似于游标的辅助工具,允许在不需要每次移动尾部的情况下从向量中删除元素。

[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)

无运行时依赖