STL List random values
-
Hi,
ich würde gerne zufällige Werte aus einer STL List abgreifen. Im Moment kopiere ich die STL::List in einen Vektor, generiere zufällige Zahlen und suche an diesen Position. Diese “Lösung“ ist aber sehr ineffizient.
Wenn ich weiß das die Liste nur aus float oder double Werten besteht kann ich den iterator nicht auch zufällig setzen. (Aber auf die den richtigen Bereich im Speicher)
Grüße
-
std::list<int>::iterator it = mylist.begin(); std::advance (it, <random-number>);
Ist zwar nicht so schnell wie auf einem vector, aber defintiv schneller als jedes Mal zu kopieren.
-
advance schrieb:
Ist zwar nicht so schnell wie auf einem vector, aber defintiv schneller als jedes Mal zu kopieren.
Kommt drauf an wie häufig man das ganze machen möchte. Wenn man nur ein paar wenige Elemente zufällig auswählen möchte ist
std::advance
sicher eine gute Lösung. Wenn man wiederholt zufällig Elemente aus der gleichen Liste auswählen möchte ist eine Kopie in einem vector sicher schneller.
-
Alternativ ist es möglicherweise eine bessere Lösung, die Werte direkt in einem
vector
vorzuhalten,
undlist
nur dann zu verwenden, wenn man einen wirklich guten Grund dafür hat. Selbst wenn man
in der Mitte des Containers viel löscht und einfügt muss man es meist ganz schön wild treiben
bevor dielist
denvector
schlägt (Ursache: CPU-Cache).Finnegan