web-dev-qa-db-fra.com

c ++ uint, unsigned int, int

Bonjour, j'ai un programme qui traite beaucoup de vecteurs et d'index des éléments de ces vecteurs, et je me demandais:

  1. y a-t-il une différence entre uint et unsigned int 
  2. ce qui est préférable d'utiliser l'un des types ci-dessus ou simplement d'utiliser 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.
  3. pensez-vous que les itérateurs soient meilleurs? est-il plus efficace que l'indexation normale vectorx[idx]?

p.s le logiciel gérera des processus de données volumineux et de bonnes performances sont indispensables

23
Ismail Marmoush
  1. 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.

  2. 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.

  3. 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.

34
AnT

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.

3
TreDubZedd

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).

1
Arslan

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 . 

0
HelloDog