3 个不稳定版本
0.2.0 | 2023年9月4日 |
---|---|
0.1.1 | 2022年11月13日 |
0.1.0 | 2022年11月13日 |
在 算法 中排名第 1192
每月下载量 160
12KB
216 行
ringstack
ringstack
[RingStack] 是一个使用环形缓冲区的轻量级栈实现。
由于 [RingStack] 是基于环形缓冲区构建的,所以当项目数量达到其限制时, oldest 项会自动在您 [push][RingStack::push()] 时删除。 (因此 [len][RingStack::len()] 方法会饱和到那个限制数。)
它支持 [RingStack::iter()] 方法,该方法返回 Iterator<&T>
。它以历史顺序逐个提供项目,从最新到最旧。
尽管 [RingStack] 目前使用 [Vec] 作为其内部结构,但一旦它在 [new][RingStack::new()] 时机分配,则不会发生额外的分配。
示例
use ringstack::RingStack;
let mut s = RingStack::<i32, 3>::new();
assert_eq!(s.peek(), None);
s.push(1);
s.push(2);
assert_eq!(s.peek(), Some(&2));
assert_eq!(s.pop(), Some(2));
assert_eq!(s[0], 1);
assert_eq!(s.get(0), Some(&1));
assert_eq!(s.get(1), None);
s.push(3);
s.push(4);
let v: Vec<i32> = s.iter().map(|e| e.clone()).collect();
assert_eq!(v, vec![4, 3, 1]);
s.push(5);
let v: Vec<i32> = s.iter().map(|e| e.clone()).collect();
assert_eq!(v, vec![5, 4, 3]);
assert_eq!(s.pop(), Some(5));
assert_eq!(s.pop(), Some(4));
assert_eq!(s.pop(), Some(3));
assert_eq!(s.pop(), None);
变更日志
0.2.0
-
添加了 [
len()
], [get()
] 方法。 -
实现了
std::ops::Index
。 -
更改 [
iter()
] 返回类型从
&Option<T>
更改为&T
,并且它只迭代有效元素,因为它返回T
的引用而不是Option
。
0.1.1
使 RingStack [Debug] 继承
0.1.0
初始版本
许可证
MIT 许可证 (MIT)
版权 (c) 2022 msr1k