2011-07-05 13 views
9

Quiero encontrar el número más bajo de los cuatro, pero esto se ve un poco extraño, ¿no hay una manera más inteligente y más corta de hacerlo?Compara 4 variables para encontrar la más baja C++

Eso es lo que tengo:

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

Respuesta

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

Incluir <algorithm>.

+0

¡Mierda que me ganaste por 7 segundos, y el mío tuvo un error! – Marlon

+0

es el árbol equilibrado mejor 'std :: min (std :: min (a, b), std :: min (c, d));'? – osgx

+3

@osgx: Sin diferencia funcional. –

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

Esta versión de 'std :: min_element 'devuelve un" iterador "a la posición del mínimo, por lo que debe desreferenciarlo. – juanchopanza

9

C++ 11:

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

¿Qué compilador estás usando? gcc 4.6 with -std = C++ 0x no le gusta esto. – juanchopanza

+0

@juanchopanza Funciona bien con g ++ 4.5 – log0

+6

Eso es 5 valores. ¿Cómo se hace 4, como se pidió? :-) –

2

Un montón de respuestas que dicen utilizar las instalaciones de la biblioteca estándar - que tienen razón, que cubre este caso! Pero, por el valor educativo, aquí está una manera un poco más concisa para hacer lo que estaba haciendo:

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

generalizarse fácilmente para diferentes tipos (aunque C++ 03 no significa que sea fácil generalizar para un número arbitrario de argumentos):

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) ¿Cómo se convierte 'T a' en' int of_a_b'? 2) tu 'of_ *' debería ser const. –

+0

Kerrek: 1) bien manchado, gracias. 2) en realidad, los cambiaré a referencias const para que no haya ninguna copia potencial invocada allí. Aclamaciones. –

Cuestiones relacionadas