假设我有两个std :: vectors x和y以及一个二元函数F.我想创建一个新的对象z(不一定是一个向量),具有z的第i个元素将是应用程序的属性F到x和y的第i个元素。目前我使用
boost::range::transform(x, y, z.begin(), F)
当然需要z的内存分配。然而,我的目标是避免这种内存分配并对转换进行惰性求值,类似于boost :: adapters :: transformed使用一元函数。换句话说,z的类型将是某种类型的boost :: range。有没有简单的方法可以做到这一点,还是我必须编写自己的范围类?提前谢谢!
答案 0 :(得分:0)
问题在于Boost.Range没有提供zip_range
可以x
和y
作为transform
的输入。所以你需要自己写一个,例如使用make_iterator_range
和zip_iterator
(来自Boost.Iterator库)。参见例如this answer代码示例。