Shuffle() vs random_shuffle() i C++

Shuffle Vs Random Shuffle I C



I C++ har standardbiblioteket to funksjoner, tilfeldig rekkefølge() og random_shuffle() som brukes til å omorganisere elementene i en beholder. Selv om begge funksjonene tjener samme formål, er de forskjellige i implementeringen og måten de genererer tilfeldige tall på.

Fra denne artikkelen vil du finne forskjellene mellom disse to funksjonene og forstå hvordan de fungerer.

shuffle() i C++

De tilfeldig rekkefølge() funksjon er en innebygd C++-funksjon som brukes til å tilfeldig blande eller omorganisere elementene i et gitt område. Funksjonen er deklarert i header-fil og har to argumenter: startposisjonen til området er det første argumentet, og det andre argumentet representerer sluttposisjonen.







I tillegg tar den også en valgfri tredje parameter, som er et funksjonsobjekt som genererer tilfeldige tall som skal brukes til å blande elementene i området.



Når tilfeldig rekkefølge() funksjonen kalles, omorganiserer den elementene tilfeldig i det angitte området ved å bruke den medfølgende tilfeldige tallgeneratoren. Resultatet av shuffle er ikke forutsigbart, og hver mulig permutasjon av elementene er like sannsynlig å skje.



Eksempel

Tenk på eksempelet nedenfor på bruk av shuffle() funksjon i C++. I dette programmet har vi laget vektoren en ting med heltallsverdiene fra 0 til 10. Deretter genererer vi en tilfeldig tallgenerator, som deretter sendes sammen med vektorens område til tilfeldig rekkefølge() funksjon. De tilfeldig rekkefølge() funksjonen tar tallet og bytter elementene basert på dette tallet. Deretter skrev vi ut den omorganiserte vektorsekvensen ved å bruke for-løkken





#include

#inkluder

#include

#inkluder

#inkluder

bruker navneområde std ;

int hoved- ( )

{

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

usignert frø = krono :: systemklokke :: ( ) . tid_siden_epoke ( ) . telle ( ) ;

tilfeldig rekkefølge ( en ting. begynne ( ) , en ting. slutt ( ) , default_random_engine ( frø ) ) ;

cout << 'blandet elementer er:' ;

til ( int & Jeg : en ting )

cout << ' ' << Jeg ;

cout << endl ;

komme tilbake 0 ;

}

random_shuffle() i C++

De random_shuffle() funksjonen omarrangerer også elementene i det gitte området tilfeldig med et tilfeldig valgt tall. Den bruker en tilfeldig tallgenerator til å generere en sekvens med tilfeldige tall og bruker deretter disse tallene til å blande elementene i området, slik at sekvensen til programmet vil være forskjellig hver gang du kjører programmet.



To parametere kreves for random_shuffle() : startposisjonen til området er den første parameteren, og den andre parameteren er sluttposisjonen. I tillegg, random_shuffle() kan ta en valgfri tredje parameter, som er et funksjonsobjekt som kan brukes til å generere tilfeldige tall for stokking av elementene.

Eksempel

Eksemplet nedenfor illustrerer virkemåten til random_shuffle() i C++. I denne koden har vi laget en vektor ting med heltallsverdier fra 1 til 10 og brukte deretter for løkke for å skrive ut den tilfeldig blandede sekvensen:

#include

#include

bruker navneområde std ;

int hoved- ( )

{

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

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

random_shuffle ( en ting. begynne ( ) , en ting. slutt ( ) ) ;

til ( int Jeg : en ting ) {

cout << Jeg << ' ' ;

}

cout << ' \n ' ;



komme tilbake 0 ;

}

Forskjellen mellom shuffle() og random_shuffle()

Her er de viktigste forskjellene mellom tilfeldig rekkefølge() og random_shuffle() funksjoner i C++.

1: random_shuffle() tar et par iteratorer som representerer utvalget av elementer som skal blandes, mens tilfeldig rekkefølge() tar et par iteratorer som representerer spekteret av elementer som skal stokkes, samt en tilfeldig tallgenerator for å bruke til stokking.

2: random_shuffle() er generelt mindre effektiv enn tilfeldig rekkefølge() , ettersom den må generere en sekvens med tilfeldige tall som skal brukes til stokking.

3: random_shuffle() bruker C++ Standard Librarys interne implementering av tilfeldig tallgenerator for å blande elementene, mens tilfeldig rekkefølge() lar deg spesifisere din egen tilfeldige tallgenerator som skal brukes til stokking, noe som gir deg mer kontroll over tilfeldigheten til stokkingen.

4: random_shuffle() ble introdusert i C++98 og støttes av alle versjoner av C++ Standard Library, mens tilfeldig rekkefølge() ble introdusert i C++11 og støttes kun av kompilatorer som implementerer den versjonen av standarden.

Siste tanker

Valget mellom tilfeldig rekkefølge() og random_shuffle() avhenger av din spesifikke brukssituasjon og krav. Hvis du trenger mer kontroll over tilfeldigheten til stokkingen, eller hvis du vil bruke en tilpasset tilfeldig tallgenerator, tilfeldig rekkefølge() ville være et bedre valg. På den annen side, hvis du ikke trenger det kontrollnivået og bare vil ha en enkel måte å blande elementer på, random_shuffle() kan være tilstrekkelig.