Je voudrais parcourir une liste de valeur de façon circulaire.
J'illustre : j'ai les valeurs {A, B, C}.
Je voudrais avoir une fonction qui me renvoie l'élément suivant :
next(A) = B
next(B) = C
next(C) = A
De meme, il me faut une fonction qui me renvoie l'élément précédent :
prev(C) = B
prev(B) = A
prev(A) = C
Je précise que ma liste est définie une fois pour toute, cad qu'elle est constante.
Pouvez-vous me conseiller sur la "meilleure" façon de faire en C++ ?
J'ai pensé à différentes choses.
1- Implémenter mes fonctions next et prev avec des switch
=> duplique l'information sur l'ordre des éléments
2- Utiliser le type std::list avec un itérateur en faisant un test du genre :
Code :
- if (it == l.end()) return l.begin();
- else return ++it;
|
=> surdimensionné pour mon besoin ?
3- Utiliser 2 conteneurs de type std::map, un pour définir les suivants et un pour définir les précédents
=> duplique l'information sur l'ordre des éléments
=> surdimensionné pour mon besoin ?
4- Utiliser un tableau :
Code :
- TYPE tab[] = {A, B, C};
- TYPE next (TYPE val)
- {
- int i = 0;
- while ((i < sizeof(tab)) && (tab[i] != val)) i++
- return tab[(i+1)%sizeof(tab)];
- }
|
=> solution qui me plaît le plus mais utilise un tableau C