Heim >Backend-Entwicklung >C++ >Wie kann ich Vektoren in C effizient und wiederverwendbar mischen?
Das Shuffling eines Vektors ist eine häufige Operation in verschiedenen Programmieraufgaben. Obwohl es mehrere Möglichkeiten gibt, dies zu erreichen, ist es wichtig, sich für einen generischen und effizienten Ansatz zu entscheiden, der für verschiedene Szenarien wiederverwendet werden kann.
Im bereitgestellten Code-Snippet umfasst der aktuelle Ansatz die Erstellung eines Zwischenarrays und die Kenntnis des Artikeltyp, was zu Ineffizienzen führen kann. Eine effizientere und wiederverwendbare Lösung wird mit C 11 und höheren Versionen bereitgestellt.
Verwendung von C 11 und höher
#include <algorithm> #include <random> auto rng = std::default_random_engine {}; std::shuffle(std::begin(cards_), std::end(cards_), rng);
Dieser Code verwendet die Funktion std::shuffle , was eine Zufalls-Engine als drittes Argument erfordert. Die std::default_random_engine wird zum Generieren von Zufallszahlen verwendet. Mit dieser Funktion können wir die Elemente an Ort und Stelle mischen, ohne Zwischenarrays zu erstellen oder Elementtypen zu kennen.
Mit C 98
Für C 98 können wir die verwenden std::random_shuffle function:
#include <algorithm> std::random_shuffle(cards_.begin(), cards_.end());
Seeding the Random Engine
Um jedes Mal unterschiedliche Permutationen zu generieren, können wir die Zufalls-Engine mithilfe von std::random_device initialisieren:
auto rd = std::random_device {}; auto rng = std::default_random_engine { rd() }; std::shuffle(std::begin(cards_), std::end(cards_), rng);
Dieser Ansatz stellt sicher, dass jeweils unterschiedliche Reihenfolgen von Shuffles generiert werden Zeitpunkt, zu dem das Programm ausgeführt wird.
Das obige ist der detaillierte Inhalt vonWie kann ich Vektoren in C effizient und wiederverwendbar mischen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!