Ich arbeite mit viel in C ++ geschriebenem Berechnungscode mit Blick auf hohe Leistung und geringen Speicheraufwand. Es verwendet (meistens vector
) häufig STL-Container und iteriert fast in jeder einzelnen Funktion über diese Container.
Der iterierende Code sieht folgendermaßen aus:
for (int i = 0; i < things.size(); ++i)
{
// ...
}
Es wird jedoch die vorzeichenlose / vorzeichenlose Nichtübereinstimmungswarnung ausgegeben (C4018 in Visual Studio).
Das Ersetzen int
durch einen unsigned
Typ ist ein Problem, da wir häufig OpenMP-Pragmas verwenden und der Zähler erforderlich ist int
.
Ich bin dabei, die (Hunderte von) Warnungen zu unterdrücken, aber ich fürchte, ich habe eine elegante Lösung für das Problem verpasst.
Auf Iteratoren . Ich denke, Iteratoren sind großartig, wenn sie an geeigneten Stellen angewendet werden. Der Code, mit dem ich arbeite, ändert niemals Container mit wahlfreiem Zugriff in list
oder so etwas (das Iterieren mit int i
ist also bereits containerunabhängig) und benötigt immer den aktuellen Index. Und all der zusätzliche Code, den Sie eingeben müssen (Iterator selbst und der Index), macht die Sache nur komplizierter und verschleiert die Einfachheit des zugrunde liegenden Codes.
int
.