2011-07-05 43 views
9

我想找到四個最低的數字,但這看起來有點奇怪,是不是有一個更聰明,更短的方法來做到這一點?比較4個變量來找到最低的C++

這就是我:

int findlowest(int one, int two, int three, int four) { 
    int output = one //as of now , we will be outputting one , except if we find a lower score. 
    if(output > two) { out = two;} // if output is proven to be bigger than two, two is our new output. 
    if(output > three){ output = three;} //same operation with three 
    if(output > four){ output = four;} // same operation with four 
    return output; 
} 

回答

22
std::min(a, std::min(b, std::min(c, d))); 

包括<algorithm>

+0

廢話你打我7秒,我的錯誤! – Marlon

+0

是更好的平衡樹'std :: min(std :: min(a,b),std :: min(c,d));'? – osgx

+3

@osgx:無功能差異。 –

9
min_int = min(min(one, two), min(three, four)); 
7
int a[] = {1,2,3,4,5}; 
int minimum = *std::min_element(a, a+5); 
+1

此版本的std :: min_element '返回一個「迭代器」到最小位置,所以你需要對它進行解引用。 – juanchopanza

9

C++ 11:

int minimum = std::min({ 1,2,3,4,5 }); 
+0

你使用什麼編譯器? gcc 4.6與-std = C++ 0x不一樣。 – juanchopanza

+0

@juanchopanza適用於g ++ 4.5 – log0

+6

這是5個值。你如何做4,就像被要求? :-) –

2

很多答案說給使用標準庫設施的 - 他們是對的,它涵蓋了這種情況!但是,對於教育價值,這裏有一個稍微更簡潔的方式去做你在做什麼:

int findlowest(int a, int b, int c, int d) 
{ 
    int of_a_b = a < b ? a : b; 
    int of_c_d = c < d ? c : d; 
    return of_a_b < of_c_d ? of_a_b : of_c_d; 
} 

容易推廣針對不同類型的(雖然C++ 03並沒有可以很容易地概括爲任意數參數):

template <typename T> 
T findlowest(const T& a, const T& b, const T& c, const T& d) 
{ 
    const T& of_a_b = a < b ? a : b; 
    const T& of_c_d = c < d ? c : d; 
    return of_a_b < of_c_d ? of_a_b : of_c_d; 
} 
+0

1)你如何將'T a'轉換爲'int of_a_b'? 2)你的'* *'應該是const。 –

+0

Kerrek:1)很好看,謝謝。 2)實際上,我會將它們更改爲const引用,因此在那裏沒有可能的副本被調用。乾杯。 –