41 votes

Trouvez le plus petit parmi 3 numéros en C++

Y a-t-il un moyen de rendre cette fonction plus élégante ? Je suis nouveau en C++, je ne sais pas s'il y a une façon plus standardisée de le faire. Est-ce que cela peut être transformé en boucle pour que le nombre de variables ne soit pas limité comme avec mon code ?

float smallest(int x, int y, int z) {

  int smallest = 99999;

  if (x < smallest)
    smallest=x;
  if (y < smallest)
    smallest=y;
  if(z < smallest)
    smallest=z;

  return smallest;
}

50voto

Alex Points 4651

Il y a un certain nombre d'améliorations qui peuvent être apportées.

Vous pouvez utiliser des fonctions standard pour la rendre plus claire :

// Notice I made the return type an int instead of a float, 
// since you're passing in ints
int smallest(int x, int y, int z){
    return std::min(std::min(x, y), z);
}

Ou mieux, comme le soulignent les commentaires :

int smallest(int x, int y, int z){
    return std::min({x, y, z});
}

Si vous voulez qu'il fonctionne sur n'importe quel nombre d'INTS, vous pouvez faire quelque chose comme ceci :

int smallest(const std::vector<int>& intvec){
    int smallest = std::numeric_limits<int>::max(); // Largest possible integer
    // there are a number of ways to structure this loop, this is just one
    for (int i = 0; i < intvec.size(); ++i) 
    {
        smallest = std::min(smallest, intvec[i]);
    }
    return smallest;
}

Vous pouvez également le rendre générique afin qu'il fonctionne sur n'importe quel type, au lieu de simplement INTS

template <typename T>
T smallest(const std::vector<T>& vec){
    T smallest = std::numeric_limits<T>::max(); // Largest possible integer
    // there are a number of ways to structure this loop, this is just one
    for (int i = 0; i < vec.size(); ++i) 
    {
        smallest = std::min(smallest, vec[i]);
    }
    return smallest;
}

11voto

CapelliC Points 30055

à part min, qui permet d'écrire le retour min(x, min(y, z)) il y a opérateur ternaire :

float smallest(int x, int y, int z){
  return x < y ? (x < z ? x : z) : (y < z ? y : z);
}

5voto

Martin James Points 15655
smallest=(x<((y<z)?y:z))?x:((y<z)?y:z);

Supposons,

x is one;
y is two;
z is three;

smallest = (one < ((two < three) ? two:three)) ? one:((two < three) ? two:three)

4voto

sank Points 1236

Une petite modification

 int smallest(int x, int y, int z){
    int smallest = min(x,y);
    return min(smallest,z);
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X