如何在Rust中遍历Vec且不销毁其中元素?
在Rust中遍历Vec且不转移所有权的正确方式
你原来的代码for i in v会把整个Vec的所有权转移到循环里,遍历结束后原Vec就无法再被使用了。要实现遍历但不销毁元素,你需要遍历Vec的引用,而不是Vec本身,下面是几种正确的写法:
方法1:遍历Vec的引用
直接在循环中使用&v,此时循环变量i的类型是&i64(常量引用),打印时println!会自动处理解引用:
for i in &v { println!("{}", i); }
方法2:使用iter()方法
调用Vec的iter()方法会返回一个迭代器,迭代器产生的元素都是原Vec元素的常量引用:
for i in v.iter() { println!("{}", i); }
如果想让i是值类型而非引用
如果你希望循环变量i是i64类型(而非引用),同时又不转移原Vec的所有权,可以通过模式匹配解引用,但要注意是遍历Vec的引用:
for &i in &v { println!("{}", i); }
你之前代码出错的原因
你写的for &i in multipliers_vec是直接遍历原Vec,此时迭代产生的元素是i64类型,而&i这个模式试图匹配一个引用类型,类型不匹配自然会报错expected i64, found reference。
内容的提问来源于stack exchange,提问作者user2138149
相关产品推荐
相关产品推荐

