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 intdurch einen unsignedTyp 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 listoder so etwas (das Iterieren mit int iist 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.