1

假设我有两个 std::vectors x 和 y 以及一个二元函数 F。我想创建一个新对象 z(不一定是向量),其属性是 z 的第 i 个元素将 F 应用于x 和 y 的第 i 个元素。暂时我用

boost::range::transform(x, y, z.begin(), F)

这当然需要为 z 分配内存。然而,我的目标是避免这种内存分配,并对转换进行惰性评估,类似于 boost::adaptors::transformed 对一元函数所做的事情。换句话说,z 的类型是某种 boost::range。有什么简单的方法可以做到这一点,还是我必须编写自己的范围类?提前致谢!

4

1 回答 1

1

问题是 Boost.Range 不提供一个zip_range可以压缩xy作为你的transform. 因此,您需要自己编写一个,例如使用make_iterator_rangeand zip_iterator(来自 Boost.Iterator 库)。有关代码示例,请参见例如此答案

于 2014-02-08T22:18:45.043 回答