Je travaille avec beaucoup de code de calcul écrit en C++ avec la haute performance et faible surcharge de la mémoire à l'esprit. Il utilise des conteneurs STL (surtout vector
) beaucoup, et parcourt que les conteneurs presque dans chaque fonction.
L'itération du code ressemble à ceci:
for (int i = 0; i < things.size(); ++i)
{
// ...
}
mais il produit de l' signé/non signé incompatibilité d'avertissement (C4018 dans Visual Studio).
Remplacement d' int
certains unsigned
type est un problème parce que nous avons souvent l'utilisation d'OpenMP pragmas, et il faut le compteur int
.
Je suis sur le point de supprimer les (centaines de) mises en garde, mais j'ai peur, j'ai perdu un peu de solution élégante à ce problème.
Sur les itérateurs. Je pense que les itérateurs sont grands lorsqu'il est appliqué dans les endroits appropriés. Le code que j'ai travaille avec la volonté de ne jamais changer d'accès aléatoire conteneurs en list
ou quelque chose (donc itération avec des int i
est déjà conteneur agnostique), et aura toujours besoin de l'index en cours. Et le code que vous avez besoin de type (itérateur lui-même et l'index) juste complique les choses et dissimule la simplicité du code sous-jacent.