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:

  1. est-il une différence entre uint et unsigned int
  2. 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.
  3. 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

20
demandé sur Donald Duck 2010-08-24 02:08:56

4 réponses

  1. 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 que unsigned int. Pourrait être unsigned long int si ou quelque chose d'autre. De toute façon, vous devez vérifier vous-même.

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

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

30
répondu AnT 2010-08-23 22:13:35

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.

3
répondu TreDubZedd 2010-08-23 22:14:23

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

1
répondu Arslan 2010-08-23 22:40:24

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.

0
répondu HelloDog 2016-10-07 05:42:18