Сопрограммы (корутины)

Корутина - это функция, которая может быть приостановлена и продолжена позже.

...

Сопрограммы в C++

Генераторы и co_await

Генератор – функция, которая может прерваться, вернуть значение, а затем снова продолжиться. Для этого мы должны дополнить интерфейс нашего promise_type методом awaitable yield_value(expr), который будет вызываться с помощью co_yield.

Пример генератора на языке Python, который ищет делители натуральных чисел:

def generator(n: int):
  yield 1 # Единица всегда делитель
  if n == 1: return

  # Ищем все делители
  i = 0
  while (i := i + 1) * i <= n:
    if n % i == 0:
      # Сохраняем делители
      a, b = i, n // i

      # Приостанавливаем выполнение функции и возвращаем делители
      yield a
      if a != b:
        yield b

  yield n # Само число - тоже делитель

x = generator(10)
print(next(x)) # 1
print(next(x)) # 2
print(next(x)) # 5
print(next(x)) # 10

...