1 个不稳定版本
0.1.0 | 2022 年 12 月 7 日 |
---|
#17 in #mutability
8KB
157 行代码(不包括注释)
MQueue
支持迭代时修改的简单 FIFO 队列。
通用用法
这是使用 MQueue 的最简单方式。
let mut queue = WorkQueue::<i32>::create();
let mut sum = 0;
queue.add(1);
queue.add(2);
queue.add(3);
while let Some(data) = queue.next_value() {
sum += data;
}
assert_eq!(sum, 6);
循环将继续提供项目,直到达到末尾。请注意,可以使用替代函数 next_ref
来获取对象的引用,而不是它的 clone
。如您所见,项目可以在循环中入队。无论您使用 next_ref
还是 next_value
,队列都可以在循环中进行修改。
let mut queue = WorkQueue::<i32>::create();
let mut sum = 0;
queue.add(1);
queue.add(2);
queue.add(3);
while let Some(data) = queue.next_ref() {
sum += data;
if sum == 6 {
queue.add(4);
}
}
清理
MQueue 通过保持当前索引来工作,这意味着元素会保留在内存中,直到手动使用 clean()
清除。当您完成使用或在任何有意义的点上手动清理队列。此操作为 O(n),而访问当前或下一个为 O(1)。您可以通过调用 dirty_count()
来获取已消耗但未清理的项目数量。
剩余
您可以通过调用 queue.remaining()
来访问剩余项目的数量。这返回一个 usize
。