我有以下代码float
,例如:
std::vector<float> v = {0.f, 1.f, 2.f};
for(size_t i = 0; i < v.size(); ++i)
if(v[i] != 0) // An optimization for `v[i] != 0`.
v[i] = v[i] * v[i] * v[i]; // Time-consuming computation.
现在我想替换float
为std::valarray<float>
:
using vfloat = std::valarray<float>;
std::vector<vfloat> v = {vfloat{0.f, 0.f}, vfloat{1.f, 0.f}, vfloat{2.f, 0.f}};
for(size_t i = 0; i < v.size(); ++i)
// if(v[i] != 0) // I want this optimization! ◀◀◀◄◀◀◀◀◀◀◀◀◀◀◀◀◀◀◀◀◀◀◀◀◀◀◀◀◀◀◀◀
v[i] = v[i] * v[i] * v[i]; // Time-consuming computation.
虽然新代码在逻辑上是正确的,但对于v[i][j] == 0
.
那么如何在没有冗余计算的情况下使用std::valarray
inif
语句呢?