2个不稳定版本
使用旧的Rust 2015
0.2.0 | 2018年12月24日 |
---|---|
0.1.0 | 2018年12月10日 |
在 数据结构 中排名 2185
每月下载量 30
在 循环数据类型 中使用
30KB
545 行
ring_queue
使用向量实现的双端队列,元素移除后可以重复使用空间。
API 设计灵感主要来源于 Python 的 collections.deque
。
可以使用任何可用的构造函数或 ring!
宏来创建环形队列。
#[macro_use] extern crate ring_queue;
use ring_queue::Ring;
// `new` for an empty ring.
let r: Ring<i32> = Ring::new();
// `with_capacity` for allocating the internal vector with the given
// capacity.
let r2: Ring<i32> = Ring::with_capacity(5);
// `ring!` macro for easy initializing the ring.
let r3: Ring<i32> = ring![1, 2, 3];
// `from_iter` to construct the ring from an iterator.
use std::iter::FromIterator;
let r4: Ring<i32> = Ring::from_iter(vec![1, 2, 3]);
不同于 front
和 back
的命名法,此库使用 left
来指代前部,没有名称来指代后部,就像 Python 的 collections.deque
库一样。
元素可以被推到左侧和右侧,也可以弹出。
#[macro_use] extern crate ring_queue;
use ring_queue::Ring;
let mut r = ring![1, 2, 3];
r.push(4);
r.push_left(0);
assert_eq!(r.pop(), Some(4));
assert_eq!(r.pop_left(), Some(0));
环形队列可以左转或右转。任何正数都会将 n
步旋转到右侧,任何负数都会将 n
步旋转到左侧。
#[macro_use] extern crate ring_queue;
use ring_queue::Ring;
let mut r = ring![1, 2, 3, 4, 5];
r.rotate(1);
assert_eq!(r.collect_vec(), vec![5, 1, 2, 3, 4]);
r.rotate(-2);
assert_eq!(r.collect_vec(), vec![2, 3, 4, 5, 1]);
环形队列实现了 collect
,如果元素类型实现了 Copy
特性,则可以将环形队列中的元素收集为向量。
#[macro_use] extern crate ring_queue;
use ring_queue::Ring;
let mut r = ring![1, 2, 3, 4];
assert_eq!(r.collect_vec(), vec![1, 2, 3, 4]);
它还实现了 into_iter
来生成一个迭代器。然而,如果元素没有实现 Copy
特性,则 into_iter
会清空环形队列。
#[macro_use] extern crate ring_queue;
use ring_queue::Ring;
// Since integers implement Copy, an iterator over this ring will not
// consume the ring itself.
let r = ring![1, 2, 3, 4];
assert_eq!(r.is_empty(), false);
for item in r.into_iter() {
println!("{}", item);
}
assert_eq!(r.is_empty(), false);
// Element is Vec<{integer}>, so it's not copyable. An iterator for this
// ring will empty the ring.
let mut r2 = ring![vec![1, 2], vec![3, 4]];
for item in r2.into_iter() {
println!("{:?}", item);
}
assert_eq!(r2.is_empty(), true);
许可证
MIT 许可证,见 LICENSE