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
노드를 수정하고 싶습니다. 스택의 맨 위에있는 노드 만 수정하면되지만이를 표현하는 방법을 모르겠습니다. 현재 노드와 경로에 대한 불변 참조가있는 스택에 대한 변경 가능한 참조가있을 수 있지만 트리를 이동할 때 변경할 수없는 참조에서 변경할 수있는 참조를 만들 수는 없습니다. – ynimous