vector float to int / sign conversion

时间:2018-04-18 19:08:31

标签: c++ vector

我有一个载体

vector<float>v = {-0.2f, 1.4f, -6.5f};

我喜欢它转换为

v = {-1, 1, -1};

逻辑是:对于每个元素,如果它小于0,则设置为-1,如果它等于0,则将其设置为0,如果它大于0,则将其设置为1。

2 个答案:

答案 0 :(得分:2)

您可以使用std::transform进行比较并相应地替换元素。

std::transform(v.begin(), v.end(), v.begin(), [](float f)
{
    return f == 0 ? 0 : (f < 0 ? -1 : 1);
});

答案 1 :(得分:0)

有一种避免平等操作符的简单方法:

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