Mir ist heute ein C++-Problem über den Weg, für das ich mal besonders Tobias' Hilfe in Anspruch nehmen möchte. ;-)
Folgendes Codeschnipsel erzeugt eine Liste aus ca. 1000 pseudozufälligen double-Werten:
srand48(123456789); typedef list<double> list; list l; while (drand48() > 0.001) { l.push_back(drand48()); }
Nun sollen Elemente dieser Liste in mehreren Durchläufen entfernt werden. Pro Durchlauf werden ca. 10 % pseudozufällig entfernt und die Durchläufe werden solange wiederholt, bis die Liste leer ist. Ein korrektes und effizientes Codeschnipsel sieht umständlich aus:
while (!l.empty()) { typedef list::iterator iterator; for (iterator i = l.begin(); i != l.end(); ) { if (drand48() < 0.1) { iterator j = i; i++; l.erase(j); if (l.empty()) { break; } } else { i++; } } }
Die Frage ist, bekomme ich das auch kürzer hin? Effizient und korrekt muss es aber sein.
Torsten