У меня есть пример кода Python, который мне нужно подражать на С++. Я не нуждаюсь в каком-либо конкретном решении (например, в решениях, основанных на совместном подходе, хотя они также будут приемлемыми ответами), я просто должен каким-то образом воспроизвести семантику.
Python
Это генератор базовой последовательности, явно слишком большой для хранения материализованной версии.
def pair_sequence():
for i in range(2**32):
for j in range(2**32):
yield (i, j)
Цель состоит в том, чтобы поддерживать два экземпляра вышеприведенной последовательности и перебирать их по полублокируемому, но в кусках. В приведенном ниже примере first_pass
использует последовательность пар для инициализации буфера, а second_pass
восстанавливает одну и ту же последовательность и снова обрабатывает буфер.
def run():
seq1 = pair_sequence()
seq2 = pair_sequence()
buffer = [0] * 1000
first_pass(seq1, buffer)
second_pass(seq2, buffer)
... repeat ...
С++
Единственное, что я могу найти для решения в С++, - это подражать yield
с сопрограммами С++, но я не нашел хороших ссылок на то, как это сделать. Меня также интересуют альтернативные (не общие) решения этой проблемы. У меня недостаточно бюджета памяти, чтобы сохранить копию последовательности между проходами.