Shuffle() vs random_shuffle() i C++

Shuffle Vs Random Shuffle I C



I C++ tillhandahåller standardbiblioteket två funktioner, blanda() och random_shuffle() som används för att ordna om elementen i en behållare. Även om båda funktionerna tjänar samma syfte, skiljer de sig åt i sin implementering och hur de genererar slumptal.

Från den här artikeln hittar du skillnaderna mellan dessa två funktioner och förstår hur de fungerar.

shuffle() i C++

De blanda() funktion är en inbyggd C++-funktion som används för att slumpmässigt blanda eller ordna om elementen i ett givet område. Funktionen deklareras i header-fil och har två argument: startpositionen för intervallet är det första argumentet och det andra argumentet representerar slutpositionen.







Dessutom krävs en valfri tredje parameter, som är ett funktionsobjekt som genererar slumptal som ska användas för att blanda elementen i intervallet.



När blanda() funktionen anropas, ordnar den slumpmässigt om elementen i det angivna intervallet med hjälp av den medföljande slumptalsgeneratorn. Resultatet av blandningen är inte förutsägbart, och varje möjlig permutation av elementen är lika sannolikt att inträffa.



Exempel

Tänk på exemplet nedan på hur du använder shuffle() funktion i C++. I det här programmet har vi skapat vektorn en sak med heltalsvärdena 0 till 10. Sedan genererar vi en slumptalsgenerator, som sedan skickas tillsammans med vektorns intervall till blanda() fungera. De blanda() funktion tar talet och byter elementen baserat på detta nummer. Sedan skrev vi ut den omarrangerade vektorsekvensen med hjälp av for-slingan





#include

#inkludera

#inkludera

#inkludera

#inkludera

använder namnutrymme std ;

int huvud ( )

{

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

osignerad utsäde = krono :: system_klocka :: nu ( ) . tid_sedan_epoken ( ) . räkna ( ) ;

blanda ( en sak. Börja ( ) , en sak. slutet ( ) , default_random_engine ( utsäde ) ) ;

cout << 'blandade element är:' ;

för ( int & i : en sak )

cout << ' ' << i ;

cout << endl ;

lämna tillbaka 0 ;

}

random_shuffle() i C++

De random_shuffle() funktion ordnar också slumpmässigt om elementen i det givna intervallet med något slumpmässigt utvalt nummer. Den använder en slumptalsgenerator för att generera en sekvens av slumptal och använder sedan dessa siffror för att blanda elementen i intervallet, så sekvensen av programmet kommer att vara annorlunda varje gång du kör programmet.



Två parametrar krävs för random_shuffle() : intervallets startposition är den första parametern och den andra parametern är slutpositionen. Dessutom, random_shuffle() kan ta en valfri tredje parameter, som är ett funktionsobjekt som kan användas för att generera slumptal för att blanda elementen.

Exempel

Exemplet nedan illustrerar hur det fungerar random_shuffle() i C++. I den här koden har vi skapat en vektor sak med heltalsvärden från 1 till 10 och använde sedan för slinga för att skriva ut den slumpmässigt blandade sekvensen:

#include

#inkludera

använder namnutrymme std ;

int huvud ( )

{

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

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

random_shuffle ( en sak. Börja ( ) , en sak. slutet ( ) ) ;

för ( int i : en sak ) {

cout << i << ' ' ;

}

cout << ' \n ' ;



lämna tillbaka 0 ;

}

Skillnaden mellan shuffle() och random_shuffle()

Här är de viktigaste skillnaderna mellan blanda() och random_shuffle() fungerar i C++.

1: random_shuffle() tar ett par iteratorer som representerar intervallet av element som ska blandas, medan blanda() tar ett par iteratorer som representerar intervallet av element som ska blandas, samt en slumptalsgenerator att använda för att blanda.

2: random_shuffle() är i allmänhet mindre effektiv än blanda() , eftersom den måste generera en sekvens av slumpmässiga nummer att använda för att blanda.

3: random_shuffle() använder C++ Standard Librarys interna implementering av slumptalsgeneratorn för att blanda elementen, medan blanda() låter dig ange din egen slumptalsgenerator för att blanda, vilket ger dig mer kontroll över slumpmässigheten i blandningen.

4: random_shuffle() introducerades i C++98 och stöds av alla versioner av C++ Standard Library, medan blanda() introducerades i C++11 och stöds endast av kompilatorer som implementerar den versionen av standarden.

Slutgiltiga tankar

Valet mellan blanda() och random_shuffle() beror på ditt specifika användningsfall och krav. Om du behöver mer kontroll över slumpmässigheten i blandningen, eller om du vill använda en anpassad slumptalsgenerator, blanda() skulle vara ett bättre val. Å andra sidan, om du inte behöver den nivån av kontroll och bara vill ha ett enkelt sätt att blanda element, då random_shuffle() kunde vara tillräckligt.