2个版本
0.1.1 | 2021年11月25日 |
---|---|
0.1.0 | 2021年11月25日 |
#1262 在 数据结构
每月 219 次下载
在 3 个 包中使用 (直接使用 2 个)
9KB
180 行
PinnedVec
元素永不移动的类似Vec的结构。
普通的Vec将其所有内容存储在一个连续的区域中,需要扩展时才会移动。PinnedVec包含几个较小的子向量,每个子向量都不会移动。第一个子向量的容量为1,第二个为2,第三个为4,第n个为2^(n-1)。
示例用法
use pinned_vec::PinnedVec;
use std::pin::Pin;
let mut v = PinnedVec::new();
v.push(5);
{
let r: Pin<&i32> = v.get(0).unwrap();
assert_eq!(*r, 5);
}
{
let r: Pin<&mut i32> = v.get_mut(0).unwrap();
assert_eq!(*r, 5);
}
assert_eq!(v.len(), 1);
v.pop();
v.push(7);
v.push(8);
v.replace(0, 6);
assert_eq!(*v.get(0).unwrap(), 6);
assert_eq!(*v.get(1).unwrap(), 8);
lib.rs
:
PinnedVec
元素永不移动的类似Vec的结构。
普通的Vec将其所有内容存储在一个连续的区域中,需要扩展时才会移动。PinnedVec包含几个较小的子向量,每个子向量都不会移动。第一个子向量的容量为1,第二个为2,第三个为4,第n个为2^(n-1)。
示例用法
use pinned_vec::PinnedVec;
use std::pin::Pin;
let mut v = PinnedVec::new();
v.push(5);
{
let r: Pin<&i32> = v.get(0).unwrap();
assert_eq!(*r, 5);
}
{
let r: Pin<&mut i32> = v.get_mut(0).unwrap();
assert_eq!(*r, 5);
}
assert_eq!(v.len(), 1);
v.pop();
v.push(7);
v.push(8);
v.replace(0, 6);
assert_eq!(*v.get(0).unwrap(), 6);
assert_eq!(*v.get(1).unwrap(), 8);