c++ uint, non signé int, int
Salut j'ai un programme qui traite beaucoup avec des vecteurs et des indices des éléments de ces vecteurs, et je me demandais:
- est-il une différence entre
uint
etunsigned int
- ce qui est mieux d'utiliser l'un des types ci-dessus ou tout simplement utiliser
int
comme je lis certaines personnes disent que le compilateur gère les valeurs int plus efficacement, mais si j'ai utiliséint
je vais devoir vérifier toujours pour les idxs négatifs qui est la douleur. - pensez-vous que les itérateurs soient mieux? est-il plus efficace que la normale indexation <!--4?
p. s le logiciel traitera de grands processus de données et une bonne performance est une exigence incontournable
4 réponses
C++ ne définit aucun type comme
uint
. Ce 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 queunsigned int
. Pourrait êtreunsigned long int
si ou quelque chose d'autre. De toute façon, vous devez vérifier vous-même.C'est une question de style personnel. Je crois, par exemple, qu'il faut utiliser des types non signés pour représenter des valeurs naturellement non négatives, comme des tailles ou des quantités. Il n'y a pas de différence dans la performance entre les types signés et non signés, en dehors de certains contextes spécifiques. Je dirais que dans la plupart des cas, il est non signé 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 l'itérateur à accès séquentiel et ainsi rendre votre implémentation applicable à n'importe quelle structure de données séquentielles. En utilisant index vous imposez l'exigence d'accès aléatoire sur la structure de données, qui est une forte exigence. Ce n'est pas une bonne idée d'imposer des exigences strictes alors qu'elles ne sont pas vraiment nécessaires.
si vous faites une boucle séquentielle à travers le vecteur, utilisez l'itérateur. Il y a des frais généraux liés à l'indexation, quel que soit le type d'index, qui peuvent être évités par itération.
1) uint = non signé int, en fait uint est juste un typedef pour int non signé (sera remplacé par int non signé lors de la compilation).
2) Si vous voulez ajouter à votre code un peu de "sécurité" va avec uint, vous éviterez certainement les valeurs négatives.
3) Si vous exécutez le vecteur séquentiellement, allez avec des itérateurs, ils sont optimisés pour la boucle séquentielle (ils sont une sorte de pointeurs).
comme d'autres affiches l'ont fait remarquer, l'uint est probablement une typedef pour unsigned
int
Si vous utilisez Visual Studio, vous pouvez vérifier que fait très rapidement en appuyant sur F12
alors que le curseur texte est en uint
voir sa définition.