Avatar ·

Quelle est la différence entre iter() et into_iter() en Rust ?

Bonjour, collègues ! J'ai commencé à apprendre Rust et je suis confronté à une confusion lors du travail avec les itérateurs. Dans la documentation, je vois que les collections (par exemple, Vec) ont des méthodes iter() et into_iter(). À première vue, elles font la même chose — permettent de parcourir les éléments. Mais j'ai remarqué qu'après avoir utilisé into_iter(), le vecteur d'origine n'est plus accessible, alors qu'après iter(), il l'est. Pourquoi ? Voici un exemple de code qui me trouble : ```rust fn main() { let numbers = vec![1, 2, 3]; // J'utilise iter() for num in numbers.iter() { println!("{}", num); } println!("Vecteur après iter() : {:?}", numbers); // Fonctionne ! // J'utilise into_iter() let numbers2 = vec![4, 5, 6]; for num in numbers2.into_iter() { println!("{}", num); } // println!("Vecteur après into_iter() : {:?}", numbers2); // Erreur ! numbers2 a été déplacé } ``` Je comprends que into_iter() 'prend' la propriété d'une certaine manière, alors que iter() non. Mais quand utiliser quelle méthode ? Et si...