gpt4 book ai didi

c++ - 什么时候使用协程而不是迭代器?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:46:29 25 4
gpt4 key购买 nike

假设我有想要“一次一个”提供的数据。有很多数据,这就是为什么我只在需要时才得到一份(以节省内存)。所以我不能将整个数据存储在 std::vector 中。

今天我可以为此使用迭代器,因为它们自然地满足了这个要求。但我也可以使用协同程序(目前使用的是 Coroutines TS)。不需要使用仅使用迭代器的算法。

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

最佳答案

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

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

协程在这方面只有在简化操作的实现的程度上才有用。使用生成协程的代码将具有与以前基本相同的接口(interface);它只是在内部使用 co_yield 和一个暂停和恢复的堆栈框架。

因为协程的栈帧是一个持续存在的对象,所以你不需要显式地创建生成对象。生成值的函数可以使用堆栈变量作为其状态,然后根据需要从该堆栈数据中获取 co_yield 值。这将允许您构建一个通用的生成器框架,许多不同的函数都可以使用,从而在所有生成器的通用接口(interface)和执行生成的特定代码之间创建一些分离。

关于c++ - 什么时候使用协程而不是迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54275767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com