我有一些需要在 C++ 中模仿的示例 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 ...
C++
对于 C++ 中的解决方案,我唯一能找到的就是模仿 yield
与 C++ 协程,但我还没有找到任何关于如何做到这一点的好的参考。我也对这个问题的替代(非通用)解决方案感兴趣。我没有足够的内存预算来保留传递之间序列的副本。
原文由 Noah Watkins 发布,翻译遵循 CC BY-SA 4.0 许可协议
生成器存在于 C++ 中,只是以另一个名称: _输入迭代器_。例如,从
std::cin
读取类似于char
的生成器。您只需要了解生成器的作用:
在您的简单示例中,这很容易。从概念上讲:
当然,我们将其包装为一个适当的类:
所以嗯嗯…可能是 C++ 有点冗长:)