是否可以在没有中间容器的情况下编写STL算法

时间:2013-12-16 01:18:58

标签: c++

我的问题部分是由this question推动的。

有没有办法在没有中间容器的情况下编写STL算法或用户编写的算法? 答案可以使用boost中的工具,但假设组合算法是用户制作的,或者来自STL。

所以boost::adaptors::reversed不计算,因为反转算法处于提升状态。

2 个答案:

答案 0 :(得分:7)

没有

假设fg是STL算法。

让我们说你想要的是f(g(x))(我试图在这里传达这个想法......)。

由于g(x)的结果必须是容器,因此无法绕过中间容器。

如果您要避免使用中间容器,则必须使用可以“检查”或与其他算法交互的算法,例如Boost.Range adaptors(例如boost::adaptors::reversed)。

例如,假设f是“排序”而g是“反向”。 Boost的适配器可以发现反向步骤是无操作并跳过它。 STL算法不能这样做,因为没有办法让这些信息通过。

答案 1 :(得分:1)

是与输入和输出迭代器兼容的算法。

它需要线程来存储执行状态,或类似的协程。

每一步都写入一个停止执行并运行下一个算法的输出迭代器。类似地,从下一个输入值读取会停止该执行线程并等待它准备就绪。

许多<algorithms>不符合上述限制。但那些做的应该记录他们的要求。 transform符合条件,我无法想到其他人。