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,
    und list 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 die list den vector schlägt (Ursache: CPU-Cache).

    Finnegan


Anmelden zum Antworten