在rust中从VecDeque的前面删除N个元素的最有效的方法是什么?
我能想到的最好的是:
let mut v = VecDeque::from(vec![1,2,3,4,5,...]);
v.drain(0..N);
但根据我的基准测试,它只比朴素的快20%:
let mut v = VecDeque::from(vec![1,2,3,4,5,...]);
for _ in 0..N {
v.pop_front().unwrap();
}
https://doc.rust-lang.org/std/collections/struct.VecDeque.html文档
用stdlib看起来不可能。
我已经实现了自己的QuickDropDequeue。它基本上是带有drop_front
和extend_from_slice
方法的标准库VecDeque,比标准库的方法要高效得多。
这个deque是u8特定的,但应该很容易修改为任何其他非掉落类型。
https://github.com/n8ta/jawk/tree/main/quick-drop-deque
遗憾的是,由于RawVec是标准库私有的,不容易重用,所以我不得不弄乱了支持Deque的RawVec的实现。这不是可生产的代码。