Quelle est la fonction la plus concise/efficace (en C++) pour convertir un index "cyclique" dans un index réel?Expression la plus concise/efficace pour une liste cyclique?
Mon problème peut être illustré par l'image suivante:
J'ai une vraie liste (un vecteur par exemple C++) de taille size
contenant des éléments (ici A, B, C, D, E
). Afin d'imiter une liste "cyclique" je cherche une fonction pour convertir un index d'entrée (de -inf
à +inf
) en index réel de la liste. Avec cette fonction et l'exemple d'image le code:
for(i=-10; i < 10; ++i) std::cout<<list[myFunction(i, list.size())]<<" ";
imprimera 4 fois la liste comme indiqué dans l'image.
Mon expression actuelle de myFunction
est:
inline int myFunction(const int i, const int size)
{
return (i >= 0) ? (i%size) : ((size-((-i)%size))%size);
}
Pensez-vous qu'il ya une façon plus simple,/concise/efficace d'écrire cela?
Pourquoi vérifiez-vous si l'index <0? la taille va être 5 dans ce cas, et le tableau va de 0 à 4. La taille de i% vous donnera un nombre de 0 à la taille - 1. return i% size, est assez bon. – JustinDanielson
Parce que prendre le module d'un nombre négatif peut renvoyer un nombre négatif (ainsi '-8% 5' peut renvoyer' -3') – murgatroid99