Shuffle() vs random_shuffle() i C++

Shuffle Vs Random Shuffle I C



I C++ har standardbiblioteket to funktioner, blande() og random_shuffle() der bruges til at omarrangere elementerne i en beholder. Selvom begge funktioner tjener det samme formål, adskiller de sig i deres implementering og den måde, de genererer tilfældige tal.

Fra denne artikel vil du finde forskellene mellem disse to funktioner og forstå, hvordan de fungerer.

shuffle() i C++

Det blande() funktion er en indbygget C++ funktion, der bruges til tilfældigt at blande eller omarrangere elementerne i et givet område. Funktionen er deklareret i header-fil og har to argumenter: startpositionen for området er det første argument, og det andet argument repræsenterer slutpositionen.







Derudover kræver det også en valgfri tredje parameter, som er et funktionsobjekt, der genererer tilfældige tal, der skal bruges til at blande elementerne i området.



Når blande() funktionen kaldes, omorganiserer den tilfældigt elementerne i det angivne område ved hjælp af den medfølgende tilfældige talgenerator. Resultatet af blandingen er ikke forudsigeligt, og hver mulig permutation af elementerne er lige så sandsynligt, at der forekommer.



Eksempel

Overvej nedenstående eksempel på brug af shuffle() funktion i C++. I dette program har vi lavet vektoren en ting med heltalværdierne fra 0 til 10. Derefter genererer vi en tilfældig talgenerator, som derefter sendes sammen med vektorens område til blande() fungere. Det blande() funktion tager tallet og bytter elementerne ud fra dette tal. Derefter udskrev vi den omarrangerede vektorsekvens ved hjælp af for-løkken





#include

#inkluder

#include

#inkluder

#include

bruger navneområde std ;

int vigtigste ( )

{

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

usigneret frø = krono :: system_ur :: nu ( ) . tid_siden_epoke ( ) . tælle ( ) ;

blande ( en ting. begynde ( ) , en ting. ende ( ) , default_random_engine ( frø ) ) ;

cout << 'blandet elementer er:' ;

til ( int & jeg : en ting )

cout << ' ' << jeg ;

cout << endl ;

Vend tilbage 0 ;

}

random_shuffle() i C++

Det random_shuffle() funktion omarrangerer også tilfældigt elementerne i det givne område med et tilfældigt udvalgt tal. Den bruger en tilfældig talgenerator til at generere en sekvens af tilfældige tal og bruger derefter disse tal til at blande elementerne i området, så programmets rækkefølge vil være anderledes, hver gang du kører programmet.



Der kræves to parametre til random_shuffle() : startpositionen for området er den første parameter, og den anden parameter er slutpositionen. Derudover random_shuffle() kan tage en valgfri tredje parameter, som er et funktionsobjekt, der kan bruges til at generere de tilfældige tal til at blande elementerne.

Eksempel

Nedenstående eksempel illustrerer arbejdet med random_shuffle() i C++. I denne kode har vi lavet en vektor ting med heltalværdier fra 1 til 10 og brugte derefter for sløjfe for at udskrive den tilfældigt blandede sekvens:

#include

#include

bruger navneområde std ;

int vigtigste ( )

{

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

srand ( static_cast < usigneret int > ( tid ( nullptr ) ) ) ;

random_shuffle ( en ting. begynde ( ) , en ting. ende ( ) ) ;

til ( int jeg : en ting ) {

cout << jeg << ' ' ;

}

cout << ' \n ' ;



Vend tilbage 0 ;

}

Forskellen mellem shuffle() og random_shuffle()

Her er de vigtigste forskelle mellem blande() og random_shuffle() funktioner i C++.

1: random_shuffle() tager et par iteratorer, der repræsenterer rækken af ​​elementer, der skal blandes, mens blande() tager et par iteratorer, der repræsenterer rækken af ​​elementer, der skal blandes, samt en tilfældig talgenerator, der skal bruges til at blande.

2: random_shuffle() er generelt mindre effektiv end blande() , da den skal generere en sekvens af tilfældige tal, der skal bruges til at blande.

3: random_shuffle() bruger C++ Standard Librarys interne implementering af tilfældige talgeneratoren til at blande elementerne, mens blande() giver dig mulighed for at angive din egen tilfældige talgenerator til at bruge til at blande, hvilket giver dig mere kontrol over tilfældigheden af ​​blandingen.

4: random_shuffle() blev introduceret i C++98 og understøttes af alle versioner af C++ Standard Library, mens blande() blev introduceret i C++11 og understøttes kun af compilere, der implementerer den version af standarden.

Afsluttende tanker

Valget mellem blande() og random_shuffle() afhænger af din specifikke brugssituation og krav. Hvis du har brug for mere kontrol over tilfældigheden af ​​blandingen, eller hvis du vil bruge en brugerdefineret tilfældig talgenerator, så blande() ville være et bedre valg. På den anden side, hvis du ikke har brug for det niveau af kontrol og bare vil have en enkel måde at blande elementer på, så random_shuffle() kunne være tilstrækkeligt.