在rust中从VecDeque的前面删除N个元素的最有效方法



在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_frontextend_from_slice方法的标准库VecDeque,比标准库的方法要高效得多。

这个deque是u8特定的,但应该很容易修改为任何其他非掉落类型。

https://github.com/n8ta/jawk/tree/main/quick-drop-deque

遗憾的是,由于RawVec是标准库私有的,不容易重用,所以我不得不弄乱了支持Deque的RawVec的实现。这不是可生产的代码。

相关内容

  • 没有找到相关文章

最新更新