gpt4 book ai didi

vector - 有效保留一系列vec元素

转载 作者:行者123 更新时间:2023-12-03 11:47:22 25 4
gpt4 key购买 nike

我想要这样的方法:

trait RetainRange {
fn retain_range(&mut self, range: std::ops::Range<usize>);
}

impl<T> RetainRange for Vec<T> {
fn retain_range(&mut self, range: std::ops::Range<usize>) {
// Retain only the elements within the given range.
let mut i = 0usize;
self.retain(|el| {
let r = range.contains(&i);
i += 1;
r
});
}
}
但是每次都调用lambda和 range.contains()似乎效率很低。有没有更好的办法?

最佳答案

此代码生成看起来更有效的汇编。

  fn retain_range(&mut self, range: std::ops::Range<usize>) {
self.truncate(range.end);
if range.start < self.len() {
self.drain(0..range.start);
} else {
self.clear();
}
}
如果范围超出了 if range.start < self.len()的末尾,则添加 Vec检查可以避免出现 panic ,并且实际上还可以提高汇编性。

关于vector - 有效保留一系列vec元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65004178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com