我想查找两个变量绝对值的最大值,并返回该变量的实际值,而不是该变量的绝对值。返回变量绝对值最大值的实际值
例如:
int x = 3;
int y = -5;
int z = max(abs(x), abs(y))
会刚刚成立z
到5
,而我希望它返回-5
。有没有一个C++函数来执行此操作?
我想查找两个变量绝对值的最大值,并返回该变量的实际值,而不是该变量的绝对值。返回变量绝对值最大值的实际值
例如:
int x = 3;
int y = -5;
int z = max(abs(x), abs(y))
会刚刚成立z
到5
,而我希望它返回-5
。有没有一个C++函数来执行此操作?
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
想法。
为什么这是downvoted?当然,它可以用一些更多的文字来解释它,但没有什么**错误**。 +1 – OMGtechy 2014-11-24 20:27:33
@OMGtechy我没有downvote,但是'max(abs(x),abs(y))== abs(x)'是一种不必要的冗长而复杂的写入abs(x)> abs(y )' – 2014-11-24 20:38:05
如果您使用C++ 11,与STL,你可以使用int的vector
,max_element
和拉姆达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
这不是一个常用的功能,不过,自己写的功能实在是微不足道。
int max_abs(int x, int y)
{
if (x == INT_MIN || y == INT_MIN)
return INT_MIN;
return (abs(x) > abs(y)) ? x : y;
}
写你自己的,这并不难。 – 2014-11-24 20:18:36
不太可能,因为这是非常具体的。为什么不简单地'z =(abs(x)> abs(y))? x:y'? (请注意,这两个版本都不适用于'INT_MIN',尽管...) – 2014-11-24 20:18:44
我怀疑是否有一个已经可用的标准函数,但是什么阻止你编写自己的?实现使用两对迭代器和'std :: max_element'似乎相当简单。 – 2014-11-24 20:18:45