2011-07-05 17 views
9

Chcę znaleźć najniższą liczbę z czterech, ale to wygląda trochę dziwnie, czy nie jest to mądrzejszy i krótszy sposób to zrobić?Porównaj 4 zmienne, aby znaleźć najniższy C++

To jest to, co mam:

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; 
} 

Odpowiedz

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

Dołącz <algorithm>.

+0

Niszczy mnie przez 7 sekund, a ja popełniłem błąd! – Marlon

+0

jest zrównoważone drzewo lepiej 'std :: min (std :: min (a, b), std :: min (c, d));'? – osgx

+3

@osgx: Brak różnicy funkcjonalnej. –

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

Ta wersja 'std :: min_element 'zwraca" iterator "do pozycji minimum, więc musisz go usunąć. – juanchopanza

9

C++ 11:

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

Jakiego kompilatora używasz? gcc 4.6 z -std = C++ 0x tego nie lubi. – juanchopanza

+0

@juanchopanza Działa dobrze z g ++ 4.5 – log0

+6

To 5 wartości. Jak się masz 4, jak się o to pytano? :-) –

2

Wiele odpowiedzi mówiąc użyć standardowych bibliotek - mają rację, że obejmuje tę sprawę! Ale dla wartości edukacyjnej, tutaj jest nieco bardziej zwięzły sposób, aby robić to, co robisz:

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; 
} 

łatwo uogólnić dla różnych typów (choć C++ 03 nie ułatwiają uogólnić dla dowolnych liczb argumenty):

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) Jak przekonwertować 'T a' na' int of_a_b'? 2) twoje 'of_ *' powinno być const. –

+0

Kerrek: 1) dobrze zauważony, dzięki. 2) w rzeczywistości zmienię je na odniesienia do stałych, więc nie ma tam żadnej potencjalnej kopii. Twoje zdrowie. –

Powiązane problemy