В чем различие между .iter() и .into_iter() в Rust?

Этот вопрос проверяет понимание различий между двумя методами итераторов 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() для перемещения данных из коллекции, когда она больше не нужна.

Уровень

  • Рейтинг:

    3

  • Сложность:

    5

Навыки

  • Rust

Ключевые слова

Подпишись на Rust Developer в телеграм