5 个版本 (2 个稳定版)
1.1.0 | 2021 年 2 月 6 日 |
---|---|
1.0.0 | 2021 年 1 月 21 日 |
0.3.0 | 2021 年 1 月 17 日 |
0.2.0 | 2021 年 1 月 10 日 |
0.1.0 | 2020 年 12 月 28 日 |
#2168 in 数据结构
93KB
1.5K SLoC
TsilCev
LinkedList
在 Vec
上。添加和删除具有 O(1)
摊销。它具有与 LinkedList
相似和与 Vec
相似的接口。
示例
use tsil_cev::TsilCev;
let mut tc = TsilCev::from(vec![5, 6, 7, 8, 9, 10]);
tc.push_front(4);
let mut cursor = tc.cursor_front_mut();
assert_eq!(cursor.current(), Some(&4));
cursor.move_next();
assert_eq!(cursor.current(), Some(&5));
cursor.remove();
assert_eq!(cursor.current(), Some(&6));
cursor.remove().remove().move_next_length(2);
assert_eq!(cursor.current(), Some(&10));
cursor.move_prev();
assert_eq!(cursor.current(), Some(&9));
tc.drain_filter_tsil(|x| *x % 2 == 0);
assert_eq!(tc.to_vec(), &[9]);
与 LinkedList
和 VecDeque
的比较 (感谢 Criterion)
VecDeque
使用 swap_remove_back
当前实现
元素的分配器是 Vec
,每个元素有两个索引(下一个和前一个元素)。当删除一个项目时,它移动到末尾,并调用类似 pop 的操作。添加和删除的时间摊销为 O(1)
。
可选功能
serde
当启用此可选依赖项时,TsilCev
实现了 serde::Serialize
和 serde::Deserialize
特性。
依赖项
~180KB