3个稳定版本
1.1.1 | 2022年11月6日 |
---|---|
1.0.0 | 2020年9月7日 |
#809 在 数据结构
90 每月下载
在 10 个crate中使用了(直接使用2个)
20KB
306 行
具有稳定元素索引的deque(双端队列)
# use vecdeque_stableix::Deque;
let mut deque = Deque::new();
let pushed_a : i64 = deque.push_back('a');
let pushed_b = deque.push_back('b');
assert_eq!(deque.get(pushed_a), Some(&'a'));
assert_eq!(deque.pop_front(), Some('a'));
assert_eq!(deque[pushed_b], 'b'); // would panic if it had been removed
索引类型
您可以使用合适的有符号整数类型,例如 i64
,作为元素索引。重要的是它不会溢出——见下文。
您可能需要明确指定索引类型
# use vecdeque_stableix::Deque;
let mut deque : Deque<_,i64> = Deque::new();
deque.push_front(42);
assert_eq!(deque.front(), Some(&42));
索引稳定性
此 Deque
通过向 std::vec_deque::VecDeque
添加前计数器来实现。抽象相当简单。提供了访问各个部分的方法。如果您使用它们,可能会使现有的索引失效,因此它们不再指向相同的元素。
如果发生这种情况,您的程序仍然会是内存安全的,但可能无法正常工作。
在文档中注明了可能引发panic的方法。
panic和索引溢出
如果索引类型溢出,则此库将引发panic。这可能会发生在您通过队列推送超过2^n个值的情况下,其中n是您的整数类型的大小。
如果您更喜欢包装,而不是panic,重新使用元素索引,可以为包含无符号类型的newtype实现impl Offset
,并执行包装算术。
可以提供非panic的库入口点,返回错误。欢迎为此提供补丁。
变更日志
1.1.1
- 从crate级别的文档更新README。
1.1.0
- 提供
IterMut
(来自iter_mut
)。 - 提供通过
impl IntoIterator
的drainingIntoIter
。 - 为
Deque
实现Eq
和PartialEq
。 - 为
Deque
实现FromIterator
和Extend
。
1.0.0
- 首次公开版本。
依赖项
~155KB