我的问题部分是由this question推动的。
有没有办法在没有中间容器的情况下编写STL算法或用户编写的算法? 答案可以使用boost中的工具,但假设组合算法是用户制作的,或者来自STL。
所以boost::adaptors::reversed
不计算,因为反转算法处于提升状态。
答案 0 :(得分:7)
没有
假设f
和g
是STL算法。
让我们说你想要的是f(g(x))
(我试图在这里传达这个想法......)。
由于g(x)
的结果必须是容器,因此无法绕过中间容器。
如果您要避免使用中间容器,则必须使用可以“检查”或与其他算法交互的算法,例如Boost.Range adaptors
(例如boost::adaptors::reversed
)。
例如,假设f
是“排序”而g
是“反向”。 Boost的适配器可以发现反向步骤是无操作并跳过它。 STL算法不能这样做,因为没有办法让这些信息通过。
答案 1 :(得分:1)
是与输入和输出迭代器兼容的算法。
它需要线程来存储执行状态,或类似的协程。
每一步都写入一个停止执行并运行下一个算法的输出迭代器。类似地,从下一个输入值读取会停止该执行线程并等待它准备就绪。
许多<algorithms>
不符合上述限制。但那些做的应该记录他们的要求。 transform
符合条件,我无法想到其他人。