Shuffle() proti random_shuffle() v C++

Shuffle Proti Random Shuffle V C



V C++ standardna knjižnica ponuja dve funkciji, premešaj() in random_shuffle() ki se uporabljajo za preurejanje elementov vsebnika. Čeprav obe funkciji služita istemu namenu, se razlikujeta po izvajanju in načinu ustvarjanja naključnih števil.

V tem članku boste izvedeli razlike med tema dvema funkcijama in razumeli, kako delujeta.

shuffle() v C++

The premešaj() funkcija je vgrajena funkcija C++, ki se uporablja za naključno mešanje ali preurejanje elementov v danem območju. Funkcija je deklarirana v in ima dva argumenta: začetni položaj obsega je prvi argument, drugi argument pa predstavlja končni položaj.







Poleg tega ima tudi izbirni tretji parameter, ki je funkcijski objekt, ki generira naključna števila, ki se uporabljajo za mešanje elementov v obsegu.



Ko premešaj() funkcija pokliče, naključno prerazporedi elemente v podanem obsegu s priloženim generatorjem naključnih števil. Rezultat mešanja ni predvidljiv in vsaka možna permutacija elementov je enako verjetna.



Primer

Oglejte si spodnji primer uporabe funkcijo shuffle(). v C++. V tem programu smo ustvarili vektor stvar s celimi vrednostmi od 0 do 10. Nato ustvarimo generator naključnih števil, ki se nato skupaj z obsegom vektorja posreduje premešaj() funkcijo. The premešaj() funkcija vzame število in zamenja elemente na podlagi tega števila. Nato smo natisnili preurejeno vektorsko zaporedje z uporabo zanke for





#include

#include

#include

#include

#include

uporaba imenskega prostora std ;

int glavni ( )

{

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

nepodpisan seme = krono :: sistemska_ura :: zdaj ( ) . čas_od_epohe ( ) . štetje ( ) ;

premešati ( stvar. začeti ( ) , stvar. konec ( ) , privzeti_naključni_motor ( seme ) ) ;

cout << 'premešani elementi so:' ;

za ( int & jaz : stvar )

cout << ' ' << jaz ;

cout << konec ;

vrnitev 0 ;

}

random_shuffle() v C++

The random_shuffle() funkcija tudi naključno prerazporedi elemente v danem obsegu z naključno izbranim številom. Uporablja generator naključnih števil za ustvarjanje zaporedja naključnih števil in nato s temi številkami premeša elemente v obsegu, tako da bo zaporedje programa drugačno vsakič, ko zaženete program.



Za random_shuffle() : začetni položaj obsega je prvi parameter, drugi parameter pa končni položaj. Poleg tega random_shuffle() lahko sprejme izbirni tretji parameter, ki je funkcijski objekt, ki se lahko uporabi za ustvarjanje naključnih števil za mešanje elementov.

Primer

Spodnji primer ponazarja delovanje random_shuffle() v C++. V tej kodi smo ustvarili a vektorska stvar s celimi vrednostmi od 1 do 10 in nato uporabil za zanko za tiskanje naključno premešanega zaporedja:

#include

#include

uporaba imenskega prostora std ;

int glavni ( )

{

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

srand ( static_cast < nepodpisan int > ( čas ( nullptr ) ) ) ;

naključno_naključno ( stvar. začeti ( ) , stvar. konec ( ) ) ;

za ( int jaz : stvar ) {

cout << jaz << ' ' ;

}

cout << ' \n ' ;



vrnitev 0 ;

}

Razlika med shuffle() in random_shuffle()

Tukaj so ključne razlike med premešaj() in random_shuffle() funkcije v C++.

1: random_shuffle() vzame par iteratorjev, ki predstavljajo obseg elementov za premeščanje, medtem ko premešaj() vzame par iteratorjev, ki predstavljajo obseg elementov za mešanje, kot tudi generator naključnih števil, ki se uporablja za mešanje.

2: random_shuffle() je na splošno manj učinkovit kot premešaj() , saj mora ustvariti zaporedje naključnih števil za uporabo pri mešanju.

3: random_shuffle() uporablja notranjo izvedbo generatorja naključnih števil standardne knjižnice C++ za mešanje elementov, medtem ko premešaj() vam omogoča, da določite svoj generator naključnih števil, ki ga boste uporabili za mešanje, kar vam daje večji nadzor nad naključnostjo mešanja.

4: random_shuffle() je bil predstavljen v C++98 in ga podpirajo vse različice standardne knjižnice C++, medtem ko premešaj() je bil predstavljen v C++11 in ga podpirajo samo prevajalniki, ki izvajajo to različico standarda.

Končne misli

Izbira med premešaj() in random_shuffle() odvisno od vašega specifičnega primera uporabe in zahtev. Če potrebujete več nadzora nad naključnostjo mešanja ali če želite uporabiti generator naključnih števil po meri, premešaj() bi bila boljša izbira. Po drugi strani pa, če ne potrebujete te ravni nadzora in želite samo preprost način za mešanje elementov, random_shuffle() lahko zadostuje.