Shuffle() vs random_shuffle() C++ nyelven

Shuffle Vs Random Shuffle C Nyelven



A C++ nyelven a standard könyvtár két funkciót biztosít, keverés() és random_shuffle() amelyeket egy tároló elemeinek átrendezésére használnak. Bár mindkét függvény ugyanazt a célt szolgálja, megvalósításukban és véletlenszámok generálásában különböznek egymástól.

Ebből a cikkből megismerheti a két funkció közötti különbségeket, és megértheti, hogyan működnek.

shuffle() a C++ nyelven

A keverés() A függvény egy beépített C++ függvény, amely az elemek véletlenszerű keverésére vagy átrendezésére szolgál egy adott tartományban. A függvényt a fejlécfájlban, és két argumentuma van: a tartomány kezdőpozíciója az első argumentum, a második argumentum pedig a végpozíciót jelenti.







Ezenkívül szükség van egy opcionális harmadik paraméterre is, amely egy függvényobjektum, amely véletlen számokat generál a tartomány elemeinek keverésére.



Amikor az keverés() függvény meghívásakor véletlenszerűen átrendezi az elemeket a megadott tartományban a megadott véletlenszám-generátor segítségével. A keverés eredménye nem megjósolható, és az elemek minden lehetséges permutációja egyformán valószínű.



Példa

Tekintsük az alábbi példát a shuffle() függvény C++ nyelven. Ebben a programban elkészítettük a vektort Egy dolog Ezután generálunk egy véletlenszám-generátort, amelyet a vektor tartományával együtt továbbítunk a keverés() funkció. A keverés() függvény veszi a számot, és ennek alapján felcseréli az elemeket. Ezután a for ciklus segítségével kinyomtattuk az átrendeződött vektorsorozatot





#include

#include

#include

#include

#include

névtér std használatával ;

int fő- ( )

{

vektor < int > Egy dolog { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;

aláírás nélküli mag = chrono :: system_clock :: Most ( ) . idő_korszak óta ( ) . számol ( ) ;

keverés ( Egy dolog. kezdődik ( ) , Egy dolog. vége ( ) , alapértelmezett_random_motor ( mag ) ) ;

cout << 'a kevert elemek a következők:' ;

számára ( int & én : Egy dolog )

cout << '' << én ;

cout << endl ;

Visszatérés 0 ;

}

random_shuffle() a C++ nyelven

A random_shuffle() függvény is véletlenszerűen átrendezi az adott tartomány elemeit valamilyen véletlenszerűen kiválasztott számmal. Véletlenszám-generátort használ véletlen számok sorozatának generálására, majd ezekkel a számokkal keveri a tartomány elemeit, így a program sorrendje minden alkalommal más lesz, amikor futtatja a programot.



Két paraméter szükséges random_shuffle() : a tartomány kezdőpozíciója az első paraméter, a második paraméter pedig a végpozíció. Ezenkívül random_shuffle() felvehet egy opcionális harmadik paramétert, amely egy függvényobjektum, amellyel véletlenszámok generálhatók az elemek keveréséhez.

Példa

Az alábbi példa szemlélteti a működését random_shuffle() C++ nyelven. Ebben a kódban létrehoztunk egy vektoros dolog 1 és 10 közötti egész számokkal, majd a hurokhoz a véletlenszerűen megkevert sorozat kinyomtatásához:

#include

#include

névtér std használatával ;

int fő- ( )

{

vektor < int > Egy dolog { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;

srand ( static_cast < aláírás nélküli int > ( idő ( nullptr ) ) ) ;

random_shuffle ( Egy dolog. kezdődik ( ) , Egy dolog. vége ( ) ) ;

számára ( int én : Egy dolog ) {

cout << én << ' ' ;

}

cout << ' \n ' ;



Visszatérés 0 ;

}

Különbség a shuffle() és a random_shuffle() között

Íme a legfontosabb különbségek között keverés() és random_shuffle() függvények C++-ban.

1: random_shuffle() egy iterátorpárt vesz igénybe, amelyek a megkeverendő elemek tartományát reprezentálják, míg keverés() szükség van egy pár iterátorra, amely a megkeverendő elemek tartományát reprezentálja, valamint egy véletlenszám-generátort a keveréshez.

2: random_shuffle() általában kevésbé hatékony, mint keverés() , mivel véletlen számsorozatot kell generálnia a keveréshez.

3: random_shuffle() a C++ Standard Library véletlenszám-generátor belső megvalósítását használja az elemek keverésére, míg keverés() lehetővé teszi saját véletlenszám-generátor megadását a keveréshez, így jobban ellenőrizheti a keverés véletlenszerűségét.

4: A random_shuffle() a C++98-ban került bevezetésre és a C++ Standard Library összes verziója támogatja, míg keverés() A C++11-ben került bevezetésre, és csak a szabvány adott verzióját megvalósító fordítók támogatják.

Végső gondolatok

A választás között keverés() és random_shuffle() az Ön konkrét használati esetétől és követelményeitől függ. Ha jobban szabályoznia kell a keverés véletlenszerűségét, vagy ha egyéni véletlenszám-generátort szeretne használni, akkor keverés() jobb választás lenne. Másrészt, ha nincs szüksége ilyen szintű vezérlésre, és csak egy egyszerű módot szeretne az elemek keverésére, akkor random_shuffle() elegendő lehet.