Этот вопрос проверяет понимание различий между двумя методами итераторов Rust — .iter() и .into_iter(), которые используются для перебора коллекций.
.iter() создает итератор, который заимствует элементы коллекции, не забирая их. .into_iter() забирает владение коллекцией и перемещает элементы из неё.
В Rust .iter() и .into_iter() используются для создания итераторов, но их поведение различается в плане владения и заимствования данных:
.iter()
Создаёт итератор, который заимствует элементы коллекции.
Элементы коллекции остаются доступными для дальнейшего использования после итерации.
Подходит, когда нужно читать данные из коллекции, но не требуется её изменять или забирать данные.
Пример:
let nums = vec![1, 2, 3];
let iter = nums.iter();
for &num in iter {
println!("{}", num); // Выводит 1, 2, 3
}.into_iter():
Перемещает элементы коллекции, т.е. забирает владение над коллекцией и её элементами.
После использования .into_iter() коллекция больше не доступна, так как владение ею было передано итератору.
Полезно, когда не нужно больше использовать коллекцию после того, как элементы из неё были перемещены.
Пример:
let nums = vec![1, 2, 3];
let iter = nums.into_iter();
for num in iter {
println!("{}", num); // Выводит 1, 2, 3
}
// nums больше не доступен здесьИспользуйте .iter() для заимствования элементов коллекции и .into_iter() для перемещения данных из коллекции, когда она больше не нужна.