vector - 从后到前填充向量的最有效方法

标签 vector iterator rust

我正在尝试用一系列值填充一个向量。为了计算第一个值,我需要计算第二个值,这取决于第三个值等等。

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/

相关文章:

json - 如何用 Rust 合并两个 JSON 对象?

rust - 可克隆迭代器特征对象

c++ - 任何可用的实现,如 Loki 的 AssocVector,但具有 Boost 的 Bimap 的功能?

c++ - 在 C++ 中, vector 是按值传递还是通过引用传递给函数

c++ - vector 分割错误

r - 如何将特定长度和数量的随机连续间隙插入向量中?

java - 自定义迭代器很慢

collections - VecDeque 环形缓冲区在内部是如何工作的?

c++ - 对列表和对的混淆

rust - 使用迭代器作为来自一个向量的函数的参数多次