Visual Studio 10 ist bei solchen "Finde Quelle"-Aufgaben wirklich bisweilen hundslangsam. Auch mit SSD und CoreI7. Installiere mal das ServicePack1 von VS2010, damit wird es *etwas* besser. Auch sonst hat VS10 einige Macken, die das VS8 nicht hatte. Aber der Compiler ist Top - hundeschnell, verlässlich und kann einige schöne C++11-Techniken, ohne die ich nicht mehr leben will. Allen voran die oben genannten Lambdas.
Zu Deinem eigentlichen Problem: Iterator-Schleifen, die zwischendrin was löschen sollen, sehen bei mir so aus, wie das dot schon beschrieb: der erase()-Aufruf gibt einen Iterator auf das nächste gültige Element zurück. Das heißt aber auch, dass Du dann in der Schleife nicht mehr so einfach ++it machen darfst, weil Du dann ja im erase-Fall zweimal vorwärts latschst. Probier es stattdessen mal mit sowas:
|
Quellcode
|
1
2
3
4
5
6
7
|
for( auto it = liste.begin(); it != liste.end(); /*nix da*/ )
{
if( it->Guid == GUID )
it = liste.erase( it);
else
++it;
}
|
und es müsste klappen. Man hat mich aber vor ne Weile mal darauf hingewiesen, dass ein erase() mit Iteratorrückgabe eine VisualC-eigene Erfindung ist. Dieser Code kompiliert also auf dem GCC nicht mehr. Die Lösung auf dem GC wäre wahrscheinlich vom Typ des Containers abhängig.