Ітератор
Трейт Iterator підтримує ітерацію над значеннями у колекції. Він вимагає наявності методу next і надає багато методів. Багато стандартних бібліотечних типів реалізують Iterator, і ви також можете реалізувати його самостійно:
struct Fibonacci { curr: u32, next: u32, } impl Iterator for Fibonacci { type Item = u32; fn next(&mut self) -> Option<Self::Item> { let new_next = self.curr + self.next; self.curr = self.next; self.next = new_next; Some(self.curr) } } fn main() { let fib = Fibonacci { curr: 0, next: 1 }; for (i, n) in fib.enumerate().take(5) { println!("fib({i}): {n}"); } }
- 
Трейт
Iteratorреалізує багато поширених функціональних операцій програмування над колекціями (наприклад,map,filter,reduceі т.д.). Це цій трейт, де ви можете знайти всю документацію про них. У Rust ці функції мають створювати код, який є настільки ж ефективним, як і еквівалентні імперативні реалізації. - 
IntoIterator— це трейт, яка забезпечує роботу циклів for. Він реалізований такими типами колекцій, якVec<T>, і посиланнями на них, наприклад&Vec<T>і&[T]. Діапазони також реалізують його. Ось чому ви можете перебирати вектор зfor i in some_vec { .. }, алеsome_vec.next()не існує.