【发布时间】:2014-02-24 01:05:00
【问题描述】:
我想使用 transform_iterator 在范围上进行增量转换。通过增量转换,我的意思是 r0 应该保持不变,并且后续元素 ri 映射到 (ri - ri - 1).
我的问题是,据我所知,transform_iterator 需要一个 const 仿函数,但我的仿函数需要记住以前的值。我该如何解决这个问题?我应该只写自己的迭代器吗?
我想要它作为迭代器的原因是在下一步中我想用它制作一个范围适配器。
编辑: 似乎 transform_iterator 确实允许非常量函子,而且确实是我的范围适配器抱怨缺乏 constness。我将保持这个问题的开放性,因为关于使用 transform_iterator 是否合适的讨论似乎很有趣。
【问题讨论】:
-
partial_sum 是个好建议!不过,我这样做部分是为了学习如何制作范围适配器。迭代器也是惰性的,而算法不是。在使用 partial_sum 的某些条件(例如第一个非零增量)之前,我无法迭代无限系列的增量。
-
实际上,我想我的意思是
std::adjacent_difference。不过听上去,你可能需要std::find_if和一个累积的谓词对象。