返回变量绝对值的最大值的实际值

时间:2014-11-24 20:16:39

标签: c++

我想找到两个变量绝对值的最大值,并返回该变量的实际值,而不是该变量的绝对值。

例如:

int x = 3;
int y = -5;
int z = max(abs(x), abs(y))

只需将z设置为5,而我希望它返回-5。是否有C ++函数来执行此操作?

3 个答案:

答案 0 :(得分:3)

int z = (max(abs(x), abs(y)) == abs(x)) ? x : y;

这就像一个if条件。它相当于

int z = x;
if(max(abs(x), abs(y)) != abs(z))
    z = y;

但要短得多。

STL中没有任何功能可以直接满足您的需求,因此您需要制作自己的功能,而且这个功能可以是一个版本。

一个更方便的人可以int z = (abs(y) < abs(x)) ? x : y思考。

答案 1 :(得分:3)

这不是一个常用的功能,但编写自己的功能是微不足道的。

int max_abs(int x, int y)
{
    if (x == INT_MIN || y == INT_MIN)
        return INT_MIN;
    return (abs(x) > abs(y)) ? x : y;
}

答案 2 :(得分:1)

如果您正在使用C ++ 11,那么使用STL可以使用vector int,max_element和lambda Compare

std::vector<int> values = {3, -5};
int largest_abs = *std::max_element(values.begin(), values.end(), [](const int& a, const int& b)
{
    return abs(a) < abs(b);
});

这将返回values的开头和结尾之间的迭代器,其绝对值最大。 (这是通过比较器找到的)然后使用*将迭代器(由std::max_element返回)转换为int