for x in vec
と書くと暗黙的に、into_iter()が呼ばれてvecは所有権を失ってしまう。forで暗黙的に呼ぶのなら、所有権を奪わないiter()の方が良かったんじゃないと思い、AI先生に理由を聞いた。どうも、into_iter()が効率がよく、所有権の管理が明確になるという2点がポイントだそうだ。
AI先生は嘘つきだから、どうせ誰かが検証しているだろうと検索してみた。https://dawn.hateblo.jp/entry/2017/07/24/165933によると、確かに、iter()のほうが誤差程度で遅いらしい。大きなデータ構造ではもう少し差がでるのだろう。
let vec = vec![1, 2, 3]; let vec_iter = vec.iter(); for x in vec_iter { println!("{}", x); } // まだvecは有効 println!("{:?}", vec); let vec = vec![1, 2, 3]; for x in vec { // vec.into_iter()が呼ばれた println!("{}", x); //println!("{:?}", vec); 当然、使えない } // ここでvecは使えなくなる //println!("{:?}", vec);