Shuffle() vs random_shuffle() programmā C++

Shuffle Vs Random Shuffle Programma C



Programmā C++ standarta bibliotēka nodrošina divas funkcijas, jaukt () un random_shuffle() kas tiek izmantoti konteinera elementu pārkārtošanai. Lai gan abas funkcijas kalpo vienam un tam pašam mērķim, tās atšķiras pēc to īstenošanas un veida, kā tās ģenerē nejaušus skaitļus.

Šajā rakstā jūs atradīsit atšķirības starp šīm divām funkcijām un sapratīsit, kā tās darbojas.

shuffle () programmā C++

The jaukt () funkcija ir iebūvēta C++ funkcija, ko izmanto, lai nejauši sajauktu vai pārkārtotu elementus noteiktā diapazonā. Funkcija ir deklarēta galvenes failu un tam ir divi argumenti: diapazona sākuma pozīcija ir pirmais arguments, bet otrais arguments apzīmē beigu pozīciju.







Turklāt tam ir nepieciešams arī neobligāts trešais parametrs, kas ir funkcijas objekts, kas ģenerē nejaušus skaitļus, kas jāizmanto diapazona elementu jaukšanai.



Kad jaukt () tiek izsaukta funkcija, tā nejauši pārkārto elementus norādītajā diapazonā, izmantojot nodrošināto nejaušo skaitļu ģeneratoru. Sajaukšanas rezultāts nav paredzams, un katra iespējamā elementu permutācija var notikt vienādi.



Piemērs

Apsveriet tālāk sniegto piemēru, kā izmantot shuffle() funkcija valodā C++. Šajā programmā mēs esam izveidojuši vektoru lieta ar veselu skaitļu vērtībām no 0 līdz 10. Pēc tam mēs ģenerējam nejaušo skaitļu ģeneratoru, kas pēc tam kopā ar vektora diapazonu tiek nodots jaukt () funkciju. The jaukt () funkcija ņem skaitli un apmaina elementus, pamatojoties uz šo skaitli. Pēc tam mēs izdrukājām pārkārtoto vektoru secību, izmantojot for cilpu





#include

#iekļaut

#include

#include

#include

izmantojot namespace std ;

starpt galvenais ( )

{

vektors < starpt > lieta { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;

neparakstīts sēklas = chrono :: sistēmas_pulkstenis :: tagad ( ) . laiks_kopš_laika ( ) . skaitīt ( ) ;

jaukt ( lieta. sākt ( ) , lieta. beigas ( ) , noklusējuma_gadījuma_dzinējs ( sēklas ) ) ;

cout << 'jauktie elementi ir:' ;

priekš ( starpt & i : lieta )

cout << '' << i ;

cout << endl ;

atgriezties 0 ;

}

random_shuffle() programmā C++

The random_shuffle() funkcija arī nejauši pārkārto elementus dotajā diapazonā ar kādu nejauši izvēlētu skaitli. Tas izmanto nejaušu skaitļu ģeneratoru, lai ģenerētu nejaušu skaitļu secību, un pēc tam izmanto šos skaitļus, lai sajauktu diapazonā esošos elementus, tāpēc programmas secība būs atšķirīga katru reizi, kad palaižat programmu.



Ir nepieciešami divi parametri random_shuffle() : diapazona sākuma pozīcija ir pirmais parametrs, bet otrais parametrs ir beigu pozīcija. Turklāt random_shuffle() var izmantot neobligātu trešo parametru, kas ir funkcijas objekts, ko var izmantot, lai ģenerētu nejaušus skaitļus elementu jaukšanai.

Piemērs

Zemāk redzamais piemērs ilustrē ierīces darbību random_shuffle() valodā C++. Šajā kodā mēs esam izveidojuši a vektora lieta ar veseliem skaitļiem vērtībām no 1 līdz 10 un pēc tam izmantoja cilpai lai izdrukātu nejauši sajaukto secību:

#include

#include

izmantojot namespace std ;

starpt galvenais ( )

{

vektors < starpt > lieta { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;

srand ( static_cast < neparakstīts starpt > ( laiks ( nullptr ) ) ) ;

random_shuffle ( lieta. sākt ( ) , lieta. beigas ( ) ) ;

priekš ( starpt i : lieta ) {

cout << i << ' ' ;

}

cout << ' \n ' ;



atgriezties 0 ;

}

Atšķirība starp shuffle() un random_shuffle()

Šeit ir galvenās atšķirības starp jaukt () un random_shuffle() funkcijas C++.

1: random_shuffle() ņem pāris iteratorus, kas attēlo jaukto elementu diapazonu, kamēr jaukt () izmanto iteratoru pāri, kas attēlo jaukto elementu diapazonu, kā arī nejaušo skaitļu ģeneratoru, ko izmantot jaukšanai.

2: random_shuffle() parasti ir mazāk efektīva nekā jaukt () , jo tam ir jāģenerē nejaušu skaitļu secība, ko izmantot jaukšanai.

3: random_shuffle() izmanto C++ standarta bibliotēkas iekšējo nejaušo skaitļu ģeneratora ieviešanu, lai sajauktu elementus, savukārt jaukt () ļauj norādīt savu nejaušo skaitļu ģeneratoru, ko izmantot jaukšanai, sniedzot jums lielāku kontroli pār jaukšanas nejaušību.

4: random_shuffle() tika ieviests C++98 un to atbalsta visas C++ standarta bibliotēkas versijas, kamēr jaukt () tika ieviests C++11, un to atbalsta tikai kompilatori, kas ievieš šo standarta versiju.

Pēdējās domas

Izvēle starp jaukt () un random_shuffle() atkarīgs no jūsu konkrētā lietošanas gadījuma un prasībām. Ja jums nepieciešama lielāka kontrole pār jaukšanas nejaušību vai ja vēlaties izmantot pielāgotu nejaušo skaitļu ģeneratoru, jaukt () būtu labāka izvēle. No otras puses, ja jums nav nepieciešams šāds kontroles līmenis un vēlaties vienkārši sajaukt elementus, tad random_shuffle() varētu būt pietiekami.