我想找到两个变量绝对值的最大值,并返回该变量的实际值,而不是该变量的绝对值。
例如:
int x = 3;
int y = -5;
int z = max(abs(x), abs(y))
只需将z
设置为5
,而我希望它返回-5
。是否有C ++函数来执行此操作?
答案 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