Rust中iter()和into_iter()有什么区别?
大家好!我开始学习Rust,在处理迭代器时遇到了困惑。在文档中,我看到集合(例如Vec)有iter()和into_iter()方法。乍一看它们做的是同一件事——允许遍历元素。但我注意到,使用into_iter()后,原始向量不再可用,而使用iter()后,它仍然可用。为什么会这样?
以下是我感到困惑的示例代码:
```rust
fn main() {
let numbers = vec![1, 2, 3];
// 使用 iter()
for num in numbers.iter() {
println!("{}", num);
}
println!("iter()后的向量: {:?}", numbers); // 正常工作!
// 使用 into_iter()
let numbers2 = vec![4, 5, 6];
for num in numbers2.into_iter() {
println!("{}", num);
}
// println!("into_iter()后的向量: {:?}", numbers2); // 错误!numbers2已被移动
}
```
我明白into_iter()以某种方式“获取”了所有权,而iter()没有。但什么时候该用哪个方法?还有,如果...