1个不稳定版本
0.1.0 | 2022年9月15日 |
---|
2484 在 算法
12KB
278 行
Rent Vec
这个crate背后的想法是拥有一个向量,其中每个项目都有一个所有者,就像它是租来的。
每次将某个项目推入RentVec时,它都会返回一个租约,这是访问底层数据的一种方式。
use rent_vec::RentVec;
let mut vec = RentVec::new();
let mut lease = vec.push(1u32);
let mut item = lease.guard();
*item = 2;
访问数据另一种方式是通过写保护器和迭代器,这保证了没有租约正在修改其条目。
let mut guard = vec.guard();
guard.iter();
guard.iter_mut();
如果移除条目,它将从后部移动一个项目到其位置,并将其他标记为已移动。
let mut lease = vec.push(10u32);
lease.remove();
一旦访问了已移动的条目,租约就会意识到新的位置,并且可以释放已移动的条目。
为什么
如果你需要一个尽可能连续的StableVec。租约也保证了有效性。
这是在早上编写的,以了解这个概念可能看起来像什么。
缺点
访问性能较差,因为它必须解决已移动条目。在第一次解决之后,它是O(1)。
推入性能也较慢,因为它必须在已移动条目中搜索已释放的条目。如果没有已移动条目,它是O(1)。