2个版本

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

#1262数据结构

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

每月 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);

无运行时依赖