Практика на итераторы в Rust
В этих задачах потренируем ручной обход
с пустым ответом, связанный тип элемента
и обертку, которая меняет значение на
лету. Пустой шаг обрабатывайте через
match или if let.
Дана структура:
struct Range {
cur: i32,
stop: i32,
}
Реализуйте обход от cur до stop
не включая верхнюю границу. Выведите
числа для Range { cur: 1, stop: 4 }
в цикле for.
Дана структура:
struct Step {
v: i32,
step: i32,
}
Сделайте обход, который прибавляет
step, пока значение не превысит
10. Пройдите вручную через
сопоставление и напечатайте все элементы
для Step { v: 2, step: 3 }.
Даны структуры:
struct Range {
cur: i32,
stop: i32,
}
struct Double<I> {
inner: I,
}
Напишите адаптер Double, который
удваивает каждый элемент внутреннего
обхода. Проверьте на счетчике от нуля
до трех и выведите все значения.
Дана структура:
struct Take<I> {
inner: I,
left: u32,
}
Отдайте не больше left элементов
из внутреннего обхода i32, затем
завершите обход. Свяжите с обходом
диапазона и покажите вывод при left: 2.
Дан список:
let nums = vec![1, 2, 3, 4];
Через цепочку адаптеров оставьте только четные числа, прибавьте единицу каждому и перенесите результат в новый вектор. Выведите его содержимое.
Дана строка:
let line = "a-b-c";
Разрежьте по дефису, превратите каждый кусок в верхний регистр и соберите результат в вектор строк. Напечатайте его длину и первый элемент.
Дана структура:
struct FilterPos<I> {
inner: I,
}
Адаптер пропускает только положительные
i32. Подключите к вектору
vec![-1, 2, 0, 5], пройдите
вручную и выведите отобранные числа.
Дано число:
let num = 3;
Соберите обход, который выдает квадраты
от 1 до этого литерала включительно.
Сложите элементы в одно число через
свой цикл и выведите сумму.