PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++: Designfrage, iterieren in zufälliger Reihenfolge



BLUESCREEN3D
09-12-2007, 21:04
Ich will alle Elemente eines Containers in zufälliger Reihenfolge durchlaufen ohne dabei die Reihenfolge im Container selbst zu ändern.
Wenn ich einfach eine Kopie des Containers erstelle, kann ich nicht mehr die Originalelemente ändern.
Also habe ich mir überlegt, die Iteratoren auf sämtliche Elemente des Containers in einem vector zu speichern, random_shuffle() darauf anzuwenden und diese dann zu durchlaufen.
Dafür würde ich dann eine eigene Iterator-Klasse schreiben, die ein Adapter für den eigentlichen Iterator ist, im Konstruktor den ganzen Arbeitsbereich übergeben kriegt und die zwei Funktionen, die ich brauche (Inkrementieren und Dereferenzieren), enthält.
Das ganze sähe dann z.B. so aus:

for (random_order_iterator< list<int> > i(some_list.begin(), some_list.end());
i; ++i)

Allerdings überlege ich, ob das so ein gutes Design wäre oder ob z.B. ein Generator, der die eigentlichen Iteratoren zurückgibt, besser wäre.

Beide Lösungen wären aber vermutlich keine Iteratoren im Sinne von C++ - man könnte die ja z.B. nicht an STL-Algorithmen wie for_each() übergeben.
Geht das überhaupt, das irgendwie so zu lösen, dass das möglich wäre?