如何在引用的 Vec 上使用生命周期?

How to work with lifetimes on a Vec of references?

我试图在嵌套层次结构中保存一个引用向量(克隆不是一种选择),但我在掌握生命周期方面遇到了麻烦。

我试图在这里总结我的代码:

struct A {
    b: B,
    c: C,
}

impl A {
    fn add(&mut self) {
        for i in self.b.d.iter() {
            self.c.e.push(&i);
        }
    }
}

struct B {
    d: Vec<E>,
}

struct C {
    e: Vec<&E>,
}

struct E {}

我正在 运行 模拟并将单个结果存储在 B 中,然后仅选取其中的一个子集进行可视化,因此 VecC 每帧都被编译、渲染和丢弃。

我的实际层次结构比这更复杂,但我希望如果我理解了这个问题,我将能够扩展它。

如何在这里设置生命周期?这甚至是惯用的 Rust 方式还是我应该重新组织我的实体?

so the Vec in C is compiled, rendered and discarded each frame

如果您只需要临时使用结构 C 的实例,那么将它们存储为结构 A.

的一部分没有多大用处

相反,我建议在 Aimpl 中添加一个 get_c 函数,它只是动态生成一个 C(或者,完全没有和有这个功能只是 return a Vec<&E>)