Shuffle() nasuprot random_shuffle() u C++

Shuffle Nasuprot Random Shuffle U C



U C++ standardna biblioteka nudi dvije funkcije, miješanje () i random_shuffle() koji se koriste za preuređivanje elemenata kontejnera. Iako obje funkcije služe istoj svrsi, razlikuju se u implementaciji i načinu na koji generiraju slučajne brojeve.

U ovom ćete članku pronaći razlike između ove dvije funkcije i razumjeti kako rade.

shuffle() u C++

The miješanje () funkcija je ugrađena C++ funkcija koja se koristi za nasumično miješanje ili preraspoređivanje elemenata u zadanom rasponu. Funkcija je deklarirana u datoteku zaglavlja i ima dva argumenta: početna pozicija raspona je prvi argument, a drugi argument predstavlja krajnju poziciju.







Osim toga, također uzima neobavezan treći parametar, koji je funkcijski objekt koji generira nasumične brojeve koji se koriste za miješanje elemenata u rasponu.



Kada miješanje () Pozove se funkcija, ona nasumično mijenja redoslijed elemenata u navedenom rasponu pomoću dobivenog generatora slučajnih brojeva. Rezultat miješanja nije predvidljiv, a svaka moguća permutacija elemenata jednako je vjerojatna.



Primjer

Razmotrite donji primjer korištenja funkcija shuffle(). u C++. U ovom programu smo kreirali vektor stvar s cjelobrojnim vrijednostima od 0 do 10. Zatim generiramo generator slučajnih brojeva, koji se zatim prosljeđuje zajedno s rasponom vektora u miješanje () funkcija. The miješanje () funkcija uzima broj i mijenja elemente na temelju tog broja. Zatim smo ispisali preuređenu vektorsku sekvencu pomoću for petlje





#include

#uključi

#include

#uključi

#include

koristeći prostor imena std ;

int glavni ( )

{

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

nepotpisan sjeme = krono :: sustav_sat :: sada ( ) . vrijeme_od_epohe ( ) . računati ( ) ;

miješati se ( stvar. početi ( ) , stvar. kraj ( ) , zadani_nasumični_motor ( sjeme ) ) ;

cout << 'izmiješani elementi su:' ;

za ( int i ja : stvar )

cout << ' ' << ja ;

cout << endl ;

povratak 0 ;

}

random_shuffle() u C++

The random_shuffle() funkcija također nasumično preuređuje elemente u zadanom rasponu s nekim nasumično odabranim brojem. Koristi generator slučajnih brojeva za generiranje niza slučajnih brojeva, a zatim koristi te brojeve za miješanje elemenata u rasponu, tako da će slijed programa biti drugačiji svaki put kada pokrenete program.



Potrebna su dva parametra za random_shuffle() : početni položaj raspona je prvi parametar, a drugi parametar je krajnji položaj. Dodatno, random_shuffle() može uzeti izborni treći parametar, koji je funkcijski objekt koji se može koristiti za generiranje nasumičnih brojeva za miješanje elemenata.

Primjer

Donji primjer ilustrira rad random_shuffle() u C++. U ovom kodu stvorili smo a vektorska stvar s cijelim brojevima od 1 do 10 i zatim upotrijebio za petlju za ispis nasumično izmiješanog niza:

#include

#include

koristeći prostor imena std ;

int glavni ( )

{

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

srand ( statično_cast < nepotpisan int > ( vrijeme ( nullptr ) ) ) ;

nasumično_namještanje ( stvar. početi ( ) , stvar. kraj ( ) ) ;

za ( int ja : stvar ) {

cout << ja << ' ' ;

}

cout << ' \n ' ;



povratak 0 ;

}

Razlika između shuffle() i random_shuffle()

Ovdje su ključne razlike između miješanje () i random_shuffle() funkcije u C++.

1: random_shuffle() uzima par iteratora koji predstavljaju raspon elemenata za miješanje, dok miješanje () uzima par iteratora koji predstavljaju raspon elemenata za miješanje, kao i generator slučajnih brojeva koji se koristi za miješanje.

2: random_shuffle() općenito je manje učinkovit od miješanje () , budući da mora generirati niz nasumičnih brojeva za korištenje za miješanje.

3: random_shuffle() koristi internu implementaciju generatora slučajnih brojeva standardne biblioteke C++ za miješanje elemenata, dok miješanje () omogućuje vam da odredite vlastiti generator slučajnih brojeva koji ćete koristiti za miješanje, dajući vam veću kontrolu nad slučajnošću miješanja.

4: random_shuffle() uveden je u C++98 i podržavaju ga sve verzije standardne biblioteke C++, dok miješanje () uveden je u C++11 i podržavaju ga samo prevoditelji koji implementiraju tu verziju standarda.

Završne misli

Izbor između miješanje () i random_shuffle() ovisi o vašem specifičnom slučaju upotrebe i zahtjevima. Ako vam je potrebna veća kontrola nad slučajnošću miješanja ili ako želite koristiti prilagođeni generator slučajnih brojeva, tada miješanje () bio bi bolji izbor. S druge strane, ako ne trebate tu razinu kontrole i samo želite jednostavan način miješanja elemenata, random_shuffle() moglo biti dovoljno.