c ++:使用具有二进制函数的boost范围转换适配器

时间:2013-06-07 10:42:39

标签: c++ algorithm boost range boost-range

假设我有两个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。有没有简单的方法可以做到这一点,还是我必须编写自己的范围类?提前谢谢!

1 个答案:

答案 0 :(得分:0)

问题在于Boost.Range没有提供zip_range可以xy作为transform的输入。所以你需要自己写一个,例如使用make_iterator_rangezip_iterator(来自Boost.Iterator库)。参见例如this answer代码示例。