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 数据结构

MIT 许可证

93KB
1.5K SLoC

TsilCev

Rust LICENSE Crates Documentation

LinkedListVec 上。添加和删除具有 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]);

LinkedListVecDeque 的比较 (感谢 Criterion)

VecDeque 使用 swap_remove_back

当前实现

元素的分配器是 Vec,每个元素有两个索引(下一个和前一个元素)。当删除一个项目时,它移动到末尾,并调用类似 pop 的操作。添加和删除的时间摊销为 O(1)

可选功能

serde

当启用此可选依赖项时,TsilCev 实现了 serde::Serializeserde::Deserialize 特性。

依赖项

~180KB