РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
681 of 1245 menu

Функция successors

Функция successors создаёт итератор, который начинает с указанного начального значения, а каждое последующее значение вычисляет путём применения заданной функции к предыдущему значению. Первым параметром функция принимает начальное значение, а вторым - функцию, которая принимает текущее значение и возвращает Option со следующим значением. Когда функция возвращает None, итератор завершается.

Синтаксис

std::iter::successors(seed, f)

Пример

Давайте создадим итератор, который генерирует последовательность чисел, начиная с 1, где каждое следующее число умножается на 2:

fn main() { let res: Vec<i32> = std::iter::successors(Some(1), |&n| Some(n * 2)) .take(6) .collect(); println!("{:?}", res); }

Результат выполнения кода:

[1, 2, 4, 8, 16, 32]

Пример

Давайте создадим итератор, который генерирует последовательность чисел Фибоначчи, начиная с пары (0, 1):

fn main() { let res: Vec<u32> = std::iter::successors(Some((0, 1)), |&(a, b)| Some((b, a + b))) .map(|(a, _)| a) .take(8) .collect(); println!("{:?}", res); }

Результат выполнения кода:

[0, 1, 1, 2, 3, 5, 8, 13]

Пример

Давайте создадим итератор, который генерирует последовательность степеней числа 3, но завершается, когда значение превышает 100:

fn main() { let res: Vec<i32> = std::iter::successors(Some(1), |&n| { let next = n * 3; if next > 100 { None } else { Some(next) } }) .collect(); println!("{:?}", res); }

Результат выполнения кода:

[1, 3, 9, 27, 81]

Смотрите также

  • функция from_fn,
    которая создаёт итератор из функции без начального значения
  • функция repeat,
    которая бесконечно повторяет одно и то же значение
  • функция once,
    которая создаёт итератор из одного значения
  • метод take,
    который ограничивает количество элементов итератора
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить