【发布时间】:2013-06-07 10:42:38
【问题描述】:
假设我有两个 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。有什么简单的方法可以做到这一点,还是我必须编写自己的范围类?提前致谢!
【问题讨论】:
-
@maverik:感谢您的回答。不幸的是,这不会达到我的目标,因为仍然需要为 z 分配内存(这次是按顺序)。
-
即使可以实现惰性求值,在编译时向量大小未知的情况下,如何避免内存分配?我只能想到一次而不是顺序地保留足够的内存;并且根据上下文,可以利用
alloca()。这两种可能性是一种选择吗?
标签: c++ algorithm boost range boost-range