我有这个方法:
void A::overlapOut(int pos)
{
for(unsigned int j = 0; j < size; ++j)
{
out[pos+j] += local_arr[j] / scalingFactor;
}
}
我想使用 STL 算法重构它std::transform
,主要是为了代码一致性。我还有大约五种其他方法,它们是主题的变体,我已经能够使用std::transform
or进行重构std::copy
,如下所示:
void A::nonOverlapOut(int pos)
{
auto normalize = [&] (double x) { return x / otherScalingFactor; };
std::transform(local_arr, local_arr + size, out + pos, normalize);
}
但是,这里的主要区别在于+=
. 我的所有其他函数不重叠,并且不使用先前的值,data[i]
因此可以进行并行调用,但是这个需要做data[i] += stuff
,而不是data[i] = stuff
,并且data[i]
可能被其他线程访问,他们也会做+=
。
那么,最好的 C++11-ic 方法是什么?我考虑过使用std::atomic<double>
而不是double
用于我的数组,但它会减慢我不需要原子访问的地方的计算吗?