Bonjour, j'ai un programme qui traite beaucoup de vecteurs et d'index des éléments de ces vecteurs, et je me demandais:
uint
et unsigned int
int
car je lis certaines personnes disent que le compilateur gère les valeurs int plus efficacement, mais si j'ai utilisé int
, je devrai toujours rechercher les idx négatifs, ce qui est pénible.vectorx[idx]
?p.s le logiciel gérera des processus de données volumineux et de bonnes performances sont indispensables
C++ ne définit aucun type tel que uint
. Ce type doit être "votre" type, c’est-à-dire un type défini dans votre code ou dans une bibliothèque tierce. On peut deviner que c'est la même chose que unsigned int
. Peut-être unsigned long int
si ou quelque chose d'autre. Quoi qu'il en soit, vous devez vérifier vous-même.
C'est une question de style personnel. Je pense, par exemple, qu’il faut utiliser des types non signés pour représenter des valeurs naturellement non négatives, telles que des tailles ou des quantités. Il n'y a pas de différence de performance entre les types signés et non signés, à l'exception de certains contextes spécifiques. Je dirais que dans la plupart des cas, il s'agit de non signés types qui seront traités plus efficacement.
Les itérateurs rendent les implémentations plus génériques, c’est-à-dire que vous pouvez utiliser un itérateur à accès séquentiel et rendre ainsi votre implémentation applicable à n’importe quelle structure de données séquentielle. En utilisant index, vous imposez l'exigence d'accès aléatoire à la structure de données, ce qui est une exigence forte. Ce n’est pas une bonne idée d’imposer des exigences fortes quand elles ne sont pas réellement nécessaires.
Si vous parcourez le vecteur séquentiellement, utilisez l'itérateur. Il existe une surcharge liée à l’indexation, quel que soit le type d’index, qui peut être évitée par une itération.
1) uint = unsigned int, en fait, uint n’est qu’un typedef pour unsigned int (sera remplacé par unsigned int sur la compilation).
2) Si vous voulez ajouter à votre code une "sécurité" qui va avec uint, vous éviterez sûrement les valeurs négatives.
3) Si vous parcourez le vecteur séquentiellement, utilisez des itérateurs, ils sont optimisés pour une boucle séquentielle (ce sont des types de pointeurs).
Comme d'autres auteurs l'ont noté, uint est probablement une typedef pour unsigned
int Si vous utilisez Visual Studio , vous pouvez le vérifier très rapidement en appuyant sur F12
lorsque le curseur de texte est dans uint
pour afficher sa définition .