我有一个向量
vector<float>v = {-0.2f, 1.4f, -6.5f};
我喜欢它被转换为
v = {-1, 1, -1};
逻辑是:对于每个元素,如果小于 0,则设置为 -1,如果等于 0,则设置为 0,如果大于 0,则设置为 1。
您可以使用
std::transform
进行比较并相应地替换元素。
std::transform(v.begin(), v.end(), v.begin(), [](float f)
{
return f == 0 ? 0 : (f < 0 ? -1 : 1);
});
有一种简单的方法可以避免相等运算符:
std::vector<float> in{-0.4, 0.0, 5.0001};
std::vector<int> out;
out.reserve(in.size());
std::transform(in.begin(), in.end(), std::back_inserter(out), [](float n) {
return (n > 0.0) - (n < 0.0);
});