矢量浮点到整数/符号转换



我有一个向量

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);
});

最新更新