我想查找兩個變量絕對值的最大值,並返回該變量的實際值,而不是該變量的絕對值。返回變量絕對值最大值的實際值
例如:
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