1
我正在尝试构建树形结构并在遍历树时维护路径。树形结构上的引用路径
下面是一些代码:
use std::collections::VecDeque;
struct Node {
children: VecDeque<Node>,
}
struct Cursor<'a> {
path: VecDeque<&'a mut Node>,
}
impl<'a> Cursor<'a> {
fn new(n: &mut Node) -> Cursor {
let mut v = VecDeque::new();
v.push_front(n);
Cursor { path: v }
}
fn go_down(&'a mut self, idx: usize) -> bool {
let n = match self.path[0].children.get_mut(idx) {
None => return false,
Some(x) => x
};
self.path.push_front(n);
true
}
}
我有两个问题。首先,编译器建议go_down()
self
参数中的生命周期说明符,但我不确定它为什么修复报告的问题。
但是,即使有此更改,上面的代码也不会编译,因为self.path
被借用了两次。有没有办法在不编写“不安全”代码的情况下维护树节点的路径?
为什么你需要可变的参考? – Shepmaster
我想修改nodes.I只需要修改堆栈顶部的节点,但是我不知道如何表达这个。 我可以有一个可变的引用到当前节点和一个具有不可变引用路径的堆栈,但是当我上传树时,我无法从不可变引用创建可变引用。 – ynimous