我正在尝试用一系列值填充一个向量。为了计算第一个值,我需要计算第二个值,这取决于第三个值等等。
let mut bxs = Vec::with_capacity(n);
for x in info {
let b = match bxs.last() {
Some(bx) => union(&bx, &x.bbox),
None => x.bbox.clone(),
};
bxs.push(b);
}
bxs.reverse();
目前我只是使用 v.push(x)
从前到后填充向量,然后使用 v.reverse()
反转向量。有没有办法一次完成此操作?
最佳答案
Is there a way to do this in a single pass?
如果您不介意调整矢量,这相对容易。
struct RevVec<T> {
data: Vec<T>,
}
impl<T> RevVec<T> {
fn push_front(&mut self, t: T) { self.data.push(t); }
}
impl<T> Index<usize> for RevVec<T> {
type Output = T;
fn index(&self, index: usize) -> &T {
&self.data[self.len() - index - 1]
}
}
impl<T> IndexMut<usize> for RevVec<T> {
fn index_mut(&mut self, index: usize) -> &mut T {
let len = self.len();
&mut self.data[len - index - 1]
}
}
关于vector - 从后到前填充向量的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37152766/