VectorをIteratorに変換する時にいつも混乱していたので整理した。 混乱 あるVectorの要素すべてを3倍するコードを考える。 fn main() { let vec1 = vec![1,2,3,4,5]; let vec2 = vec1.iter() .map(|i| i * 3) .collect::<Vec<i32>>(); println!("{:?}", vec1); println!("{:?}", vec2); } このコードはコンパイルできるが、以下のような疑問がある。 5行目で vec1はなぜ使えるのか? 3行目の vec1.iter()で使われているじゃないか! map(|i| i * 3)の iは参照なのか値なのか? これらの疑問に関する答えは、 iter()はVectorをmoveしない。into_iter()はVectorをmoveする。 iter()