何时在迭代器上使用协程?

时间:2019-01-20 10:57:05

标签: c++ c++-coroutine

假设我要“一次提供”一个数据。有很多数据,这就是为什么我仅在需要时才保存一件(以节省内存)的原因。因此,我无法将所有数据存储在std::vector内。

今天,我可以为此使用迭代器,因为它们自然符合此要求。但是我也可以使用协程(目前使用协程TS)。不需要使用仅使用迭代器的算法。

在这种情况下,使用协程比迭代器有什么优势吗?

1 个答案:

答案 0 :(得分:1)

迭代器充当一种黏合剂,允许用户编写对值序列进行操作的算法,而无需知道该序列如何到达或保持。但是算法和序列之间的特定“胶水”无关紧要。唯一重要的是,必须根据特定类型的“胶水”来实现算法的特定实现。

标准库迭代器模型非常有用,因为标准库随附了使用该模型的工具(算法,容器的迭代器构造函数,基于范围的for等)。如果您实际上并没有使用这些机制,那么与其他任何模型相比,使用迭代器模型都不会获得任何目标。您可能只有一个具有get_next函数和has_next或类似接口的对象。它们几乎都具有相同的效率,从一个转换为另一个并不难。

协程仅在此方面可简化操作的实现,才有用。使用生成协程的代码将具有与以前基本相同的接口;它只是在内部使用co_yield和一个暂停并恢复的堆栈帧。

因为协程的堆栈框架是一个持久存在的对象,所以您无需显式创建生成对象。生成值的函数可以将堆栈变量用于其状态,然后根据需要从该堆栈数据中获取co_yield值。这样一来,您就可以构建可以使用许多不同功能的通用生成器框架,从而在所有生成器的通用接口与进行生成的特定代码之间建立某种隔离。

相关问题