Сопрограммы (корутины)
Корутина - это функция, которая может быть приостановлена и продолжена позже.
...
Сопрограммы в 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
...