Effizientes Mischen eines std::vector
Beim Mischen eines std::vector spielt die Effizienz eine entscheidende Rolle. Die bereitgestellte Methode, die ein Zwischenarray und typspezifisches Wissen verwendet, ist nicht optimal.
Moderner C-Ansatz
In C 11 und höher ist ein effizienterer Ansatz verfügbar:
#include <algorithm> #include <random> auto rng = std::default_random_engine {}; std::shuffle(std::begin(cards_), std::end(cards_), rng);
Diese Methode nutzt die Funktion std::shuffle, die die Elemente effizient randomisiert. Denken Sie daran, die RNG-Instanz über mehrere std::shuffle-Aufrufe hinweg wiederzuverwenden, um eine konsistente Randomisierung zu gewährleisten.
Personalisiertes Shuffling
Wenn Sie unterschiedliche zufällige Sequenzen über Programmausführungen hinweg wünschen, setzen Sie den Zufallsgenerator Engine mit der Ausgabe von std::random_device:
auto rd = std::random_device {}; auto rng = std::default_random_engine { rd() }; std::shuffle(std::begin(cards_), std::end(cards_), rng);
C 98 Ansatz
Für C 98 bleibt die Funktion std::random_shuffle anwendbar:
#include <algorithm> std::random_shuffle(cards_.begin(), cards_.end());
Das obige ist der detaillierte Inhalt vonWie kann ich einen std::vector in C effizient mischen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!