Une liste de valeurs acceptables pour des entiers

Une liste de valeurs acceptables pour des entiers - C++ - Programmation

Marsh Posté le 23-01-2003 à 17:25:16    

Dans le construceteur d'un objet, je récupère
une valeur entière.
Il faut que cette valeur fasse partie d'une liste de valeurs qui sont acceptables.
Comment puis-je faire ?
 
Je pensais à qqchose du genre :
 
enum valeurs_ok { 2, 8, 9, 10 };
 
Puis........puis je ne sais pas. De toute façon
on ne peut pas faire de "enum" avec des entiers.
 
Une façon de faire serait de créer un tableau d'entiers,
mais cela m'obligerait à parcourir tout le tableau pour vérifier
si le nombre est bon.
 
Est-ce la seule solution ?


---------------
Il n'est pas nécéssaire de réussir pour persévérer.
Reply

Marsh Posté le 23-01-2003 à 17:25:16   

Reply

Marsh Posté le 23-01-2003 à 17:56:31    

Comment ça on peut pas faire de enum avec des entiers !???
c bien enum que j'utiliserais ds ton cas :


// Sois + explicite sur le nom de ton enum
enum VALS {DEUX=2, HUIT=8, NEUF=9, DIX=10}
 
taFonctionOuMethode (VALS _monVals)
{ //...
}

Reply

Marsh Posté le 23-01-2003 à 22:31:03    

si ton tableau d'entiers est trie tu peux faire
une recherche en temps logarithmique (cas le pire).
 
Tu peux aussi utiliser des set c'est pour ca qu'ils existent:  
tu crees un set d'entier et tu peux verifier la presence
de l'entier en question en temps logarithmique (ca t'evite de creer la fonction de recherche a la main meme si c'est assez rapide a faire)
 

Code :
  1. int tab[] = {2, 8, 9, 10} ;
  2. //construit le set a partir du tableau
  3. std::set<int> correctTab(tab, tab + 4) ;
  4. if (correctTab.find(entier))
  5. {
  6.   std::cout << "entier ok" << std::endl;
  7. }
  8. else
  9. {
  10.   std::cout << "entier pas ok" << std::endl;
  11. }


 
les enums ne reglent qu'a moitie ton probleme
parce que l'utilisateur va pouvoir faire un
cast (explicite) d'un entier vers le type enum.
Cela sert si tes entiers representent une valeur
symbolique et qu'une autre valeur n'a aucun sens.
par exemple :

Code :
  1. enum Couleur {
  2.   ROUGE,
  3.   JAUNE,
  4.   VERT
  5. };


Cela permet d'encoder des constantes sans utiliser
de define egalement.
 
A+
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 23-01-2003 à 22:43:44    

si ton constructeur prends comme paramètre un int, le problème de l'enum, c'est effectivement le parcours un peu la batarde... donc le mieux c'est un joli tableau C static et const en de préférence trié pour une recherche plus rapide.
 
mais effectivement, si tu utilise une enum comme paramètre, plus de problème, c'est tout ce qu'il y a de plus courant

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed