#vec #pin #elements #move #structure #pinned #vec-like

pinned_vec

元素永不移动的类似Vec的数据结构

2个版本

0.1.1 2021年11月25日
0.1.0 2021年11月25日

#1262数据结构

Download history 81/week @ 2024-03-25 232/week @ 2024-04-01 174/week @ 2024-04-08 24/week @ 2024-04-15 104/week @ 2024-04-22 44/week @ 2024-04-29 76/week @ 2024-05-06 67/week @ 2024-05-13 107/week @ 2024-05-20 130/week @ 2024-05-27 72/week @ 2024-06-03 103/week @ 2024-06-10 30/week @ 2024-06-17 71/week @ 2024-06-24 58/week @ 2024-07-01 39/week @ 2024-07-08

每月 219 次下载
3 包中使用 (直接使用 2 个)

MPL-2.0 许可

9KB
180

PinnedVec

crates.io crates.io

元素永不移动的类似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);

无运行时依赖