#deque #queue #stable #double-ended #index #vec-deque #values

vecdeque-stableix

具有稳定索引值的Deque

3个稳定版本

1.1.1 2022年11月6日
1.0.0 2020年9月7日

#809数据结构

Download history 16/week @ 2024-03-11 24/week @ 2024-03-18 37/week @ 2024-03-25 93/week @ 2024-04-01 4/week @ 2024-04-08 60/week @ 2024-04-15 27/week @ 2024-04-22 9/week @ 2024-04-29 22/week @ 2024-05-06 16/week @ 2024-05-13 8/week @ 2024-05-20 25/week @ 2024-05-27 15/week @ 2024-06-03 18/week @ 2024-06-10 19/week @ 2024-06-17 37/week @ 2024-06-24

90 每月下载
10 个crate中使用了(直接使用2个)

GPL-3.0-or-later

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的draining IntoIter
  • Deque实现EqPartialEq
  • Deque实现FromIteratorExtend

1.0.0

  • 首次公开版本。

依赖项

~155KB