将矢量用作堆栈(存储被推送和弹出的状态)。
while stack.len() != 0 {
let state = stack.pop().unwrap();
// ... optionally push other states onto the stack.
}
在Rust中有一种不那么冗长的方法吗?
答案 0 :(得分:6)
您可以使用pop()
返回Option<T>
并使用while let
循环匹配的事实:
while let Some(state) = stack.pop() {
// ... fine to call stack.push() here
}
while let
贬低了以下内容:
loop {
match stack.pop() {
Some(state) => {
// ... fine to call stack.push() here
}
_ => break
}
}
答案 1 :(得分:2)
只是提供替代方法,您还可以使用drain method删除元素,并在Iterator
中将它们提供给您。
stack.drain(..).map(|element| ...and so on
或
for element in stack.drain(..) {
//do stuff
}
如果您只想删除特定范围的元素,也可以提供RangeArgument
。这可以<start-inclusive>..<end-exclusive>
的形式提供。范围参数的开始和结束都是可选的,并且默认为向量的结尾,因此调用drain(..)
只会消耗整个向量,而drain(2..)
将保留前2个元素然后把剩下的都耗尽。