Shuffle() vs random_shuffle() C++

Shuffle Vs Random Shuffle C



C++ standartinėje bibliotekoje yra dvi funkcijos, shuffle () ir random_shuffle() kurie naudojami konteinerio elementams pertvarkyti. Nors abi funkcijos atlieka tą patį tikslą, skiriasi jų įgyvendinimas ir atsitiktinių skaičių generavimo būdas.

Iš šio straipsnio sužinosite šių dviejų funkcijų skirtumus ir suprasite, kaip jos veikia.

shuffle () C++ kalboje

The shuffle () funkcija yra integruota C++ funkcija, naudojama atsitiktinai maišyti arba pertvarkyti elementus tam tikrame diapazone. Funkcija deklaruojama antraštės failą ir turi du argumentus: diapazono pradžios padėtis yra pirmasis argumentas, o antrasis argumentas nurodo pabaigos padėtį.







Be to, taip pat reikalingas pasirenkamas trečiasis parametras, kuris yra funkcinis objektas, generuojantis atsitiktinius skaičius, kurie bus naudojami diapazono elementų maišymui.



Kai shuffle () iškviečiama funkcija, ji atsitiktinai pertvarko elementus nurodytame diapazone, naudodama pateiktą atsitiktinių skaičių generatorių. Sumaišymo rezultatas nėra nuspėjamas, ir kiekviena galima elementų permutacija yra vienodai tikėtina.



Pavyzdys

Apsvarstykite toliau pateiktą naudojimo pavyzdį shuffle() funkcija C++ kalboje. Šioje programoje mes sukūrėme vektorių dalykas su sveikųjų skaičių reikšmėmis nuo 0 iki 10. Tada sugeneruojame atsitiktinių skaičių generatorių, kuris kartu su vektoriaus diapazonu perduodamas shuffle () funkcija. The shuffle () funkcija paima skaičių ir sukeičia elementus pagal šį skaičių. Tada mes atspausdinome pertvarkytą vektorių seką naudodami for kilpą





#include

#include

#include

#include

#include

naudojant vardų sritį std ;

tarpt pagrindinis ( )

{

vektorius < tarpt > dalykas { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;

nepasirašytas sėkla = chrono :: sistemos_laikrodis :: dabar ( ) . laikas_nuo_epochos ( ) . skaičiuoti ( ) ;

maišyti ( dalykas. pradėti ( ) , dalykas. galas ( ) , numatytasis_atsitiktinis_variklis ( sėkla ) ) ;

cout << 'maišyti elementai yra:' ;

dėl ( tarpt & i : dalykas )

cout << '' << i ;

cout << endl ;

grąžinti 0 ;

}

random_shuffle() C++

The random_shuffle() funkcija taip pat atsitiktinai perskirsto elementus duotame diapazone su tam tikru atsitiktinai parinktu skaičiumi. Jis naudoja atsitiktinių skaičių generatorių, kad sugeneruotų atsitiktinių skaičių seką, o tada naudoja tuos skaičius, kad sumaišytų diapazono elementus, todėl programos seka bus skirtinga kiekvieną kartą, kai paleisite programą.



Tam reikalingi du parametrai random_shuffle() : diapazono pradinė padėtis yra pirmasis parametras, o antrasis parametras yra pabaigos padėtis. Be to, random_shuffle() gali paimti pasirenkamą trečiąjį parametrą, kuris yra funkcijos objektas, kurį galima naudoti atsitiktiniams skaičiams sumaišyti elementus.

Pavyzdys

Žemiau pateiktas pavyzdys iliustruoja, kaip veikia random_shuffle() C++ kalboje. Šiame kode sukūrėme a vektorinis dalykas su sveikųjų skaičių reikšmėmis nuo 1 iki 10 ir tada panaudojo už kilpą jei norite spausdinti atsitiktinai sumaišytą seką:

#include

#include

naudojant vardų sritį std ;

tarpt pagrindinis ( )

{

vektorius < tarpt > dalykas { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;

srand ( statinis_perdavimas < nepasirašytas tarpt > ( laikas ( nullptr ) ) ) ;

random_shuffle ( dalykas. pradėti ( ) , dalykas. galas ( ) ) ;

dėl ( tarpt i : dalykas ) {

cout << i << ' ' ;

}

cout << ' \n ' ;



grąžinti 0 ;

}

Skirtumas tarp shuffle() ir random_shuffle()

Štai pagrindiniai skirtumai tarp shuffle () ir random_shuffle() funkcijos C++.

1: random_shuffle() paima porą iteratorių, atspindinčių maišytinų elementų diapazoną shuffle () paima porą iteratorių, nurodančių maišytinų elementų diapazoną, taip pat atsitiktinių skaičių generatorių, kuris naudojamas maišymui.

2: random_shuffle() paprastai yra mažiau efektyvus nei shuffle () , nes ji turi sugeneruoti atsitiktinių skaičių seką, kurią naudotų maišymui.

3: random_shuffle() Elementams maišyti naudoja C++ standartinės bibliotekos vidinį atsitiktinių skaičių generatoriaus įgyvendinimą shuffle () leidžia nurodyti savo atsitiktinių skaičių generatorių, kurį naudosite maišymui, kad galėtumėte geriau valdyti maišymo atsitiktinumą.

4: random_shuffle() buvo pristatytas C++98 ir palaiko visos C++ standartinės bibliotekos versijos, tuo tarpu shuffle () buvo pristatytas C++11 ir palaikomas tik kompiliatorių, kurie įdiegia tą standarto versiją.

Paskutinės mintys

Pasirinkimas tarp shuffle () ir random_shuffle() priklauso nuo konkretaus naudojimo atvejo ir reikalavimų. Jei jums reikia labiau kontroliuoti maišymo atsitiktinumą arba jei norite naudoti pasirinktinį atsitiktinių skaičių generatorių, tada shuffle () būtų geresnis pasirinkimas. Kita vertus, jei jums nereikia tokio valdymo lygio ir norite tik paprasto būdo maišyti elementus, tada random_shuffle() galėtų pakakti.