【发布时间】:2016-09-06 06:31:54
【问题描述】:
我正在尝试用一系列值填充向量。为了计算第一个值,我需要计算第二个值,这取决于第三个值等等。
let mut bxs = Vec::with_capacity(n);
for x in info {
let b = match bxs.last() {
Some(bx) => union(&bx, &x.bbox),
None => x.bbox.clone(),
};
bxs.push(b);
}
bxs.reverse();
目前我只是使用v.push(x) 从前到后填充矢量,然后使用v.reverse() 反转矢量。有没有办法一次性做到这一点?
【问题讨论】:
-
这听起来很适合递归。
-
unsafe方式可能会更快,但我不确定是否值得。 -
FWIW,我会完全按照您的描述进行操作,按顺序推送然后反转。由于您肯定会进行一些分析来测试一次性解决方案是否更有效,您能否向我们展示表明两次解决方案效率不高的分析结果?
-
@Shepmaster 我认为你是对的,两次传球更好。代码的简单性和性能之间的权衡不值一提。
-
虽然我不确定为什么两次传球会比一次传球更有效率。我能想到的唯一原因是方向会混淆预取器,但英特尔 CPU 可以检测正向或反向的内存访问流 (stackoverflow.com/questions/1950878/…)。此 cofr 是光线追踪器的一部分,其中性能非常重要,对于大图像,代码段可能会运行数百万次。