Shuffle() vs random_shuffle() C++:ssa

Shuffle Vs Random Shuffle C Ssa



C++:ssa vakiokirjasto tarjoaa kaksi toimintoa, sekoitus () ja random_shuffle() joita käytetään säiliön elementtien järjestämiseen uudelleen. Vaikka molemmat funktiot palvelevat samaa tarkoitusta, ne eroavat toteutuksestaan ​​ja tapansa tuottaa satunnaislukuja.

Tästä artikkelista löydät erot näiden kahden toiminnon välillä ja ymmärrät kuinka ne toimivat.

shuffle() C++:ssa

The sekoitus () toiminto on sisäänrakennettu C++-toiminto, jota käytetään satunnaisesti sekoittamaan tai järjestämään elementit uudelleen tietyllä alueella. Toiminto on ilmoitettu kohdassa otsikkotiedosto ja siinä on kaksi argumenttia: alueen aloituskohta on ensimmäinen argumentti ja toinen argumentti edustaa loppukohtaa.







Lisäksi se ottaa myös valinnaisen kolmannen parametrin, joka on funktioobjekti, joka luo satunnaislukuja, joita käytetään alueen elementtien sekoittamiseen.



Kun sekoitus () toimintoa kutsutaan, se järjestää satunnaisesti uudelleen määritetyn alueen elementit käyttämällä toimitettua satunnaislukugeneraattoria. Sekoituksen tulos ei ole ennustettavissa, ja jokainen mahdollinen elementtien permutaatio on yhtä todennäköinen.



Esimerkki

Harkitse alla olevaa esimerkkiä shuffle()-funktio C++:ssa. Tässä ohjelmassa olemme luoneet vektorin asia kokonaislukuarvoilla 0-10. Sitten luomme satunnaislukugeneraattorin, joka välitetään vektorin alueen kanssa sekoitus () toiminto. The sekoitus () funktio ottaa luvun ja vaihtaa elementit tämän luvun perusteella. Sitten tulostimme uudelleen järjestetyn vektorisekvenssin käyttämällä for-silmukkaa





#include

#sisällytä

#include

#sisällytä

#include

käyttämällä nimiavaruutta std ;

int pää ( )

{

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

allekirjoittamaton siemen = krono :: system_clock :: nyt ( ) . aika_aikakaudesta ( ) . Kreivi ( ) ;

sekoita ( asia. alkaa ( ) , asia. loppu ( ) , oletussatunnainen_moottori ( siemen ) ) ;

cout << 'sekoitetut elementit ovat:' ;

varten ( int & i : asia )

cout << '' << i ;

cout << endl ;

palata 0 ;

}

random_shuffle() C++:ssa

The random_shuffle() funktio myös järjestää satunnaisesti uudelleen tietyn alueen elementit jollain satunnaisesti valitulla numerolla. Se käyttää satunnaislukugeneraattoria satunnaislukusarjan luomiseen ja käyttää sitten näitä numeroita sekoittamaan alueen elementit, joten ohjelman järjestys on erilainen joka kerta, kun suoritat ohjelman.



Kaksi parametria vaaditaan random_shuffle() : alueen aloituskohta on ensimmäinen parametri ja toinen parametri on lopetuskohta. Lisäksi, random_shuffle() voi ottaa valinnaisen kolmannen parametrin, joka on funktioobjekti, jonka avulla voidaan luoda satunnaislukuja elementtien sekoittamista varten.

Esimerkki

Alla oleva esimerkki havainnollistaa laitteen toimintaa random_shuffle() C++:ssa. Tässä koodissa olemme luoneet a vektori juttu kokonaislukujen arvoilla 1-10 ja sitten käytettiin silmukalle Tulosta satunnaisesti sekoitettu sarja seuraavasti:

#include

#include

käyttämällä nimiavaruutta std ;

int pää ( )

{

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

srand ( static_cast < allekirjoittamaton int > ( aika ( nullptr ) ) ) ;

random_shuffle ( asia. alkaa ( ) , asia. loppu ( ) ) ;

varten ( int i : asia ) {

cout << i << ' ' ;

}

cout << ' \n ' ;



palata 0 ;

}

Ero shuffle() ja random_shuffle() välillä

Tässä ovat tärkeimmät erot sekoitus () ja random_shuffle() toimii C++:ssa.

1: random_shuffle() ottaa parin iteraattoria, jotka edustavat sekoitettua elementtialuetta, while sekoitus () ottaa parin iteraattoria, jotka edustavat sekoitettujen elementtien aluetta, sekä satunnaislukugeneraattorin, jota käytetään sekoittamiseen.

2: random_shuffle() on yleensä vähemmän tehokas kuin sekoitus () , koska sen on luotava satunnaislukusarja sekoituskäyttöä varten.

3: random_shuffle() käyttää C++ Standard Libraryn sisäistä satunnaislukugeneraattorin toteutusta elementtien sekoittamiseen sekoitus () voit määrittää oman satunnaislukugeneraattorisi sekoittamiseen, mikä antaa sinulle paremman hallinnan sekoituksen satunnaisuudesta.

4: random_shuffle() otettiin käyttöön C++98:ssa ja sitä tukevat kaikki C++ Standard Libraryn versiot, kun taas sekoitus () otettiin käyttöön C++11:ssä ja sitä tukevat vain kääntäjät, jotka toteuttavat kyseisen standardin version.

Lopulliset ajatukset

Valinta välillä sekoitus () ja random_shuffle() riippuu erityisestä käyttötapauksestasi ja vaatimuksistasi. Jos tarvitset enemmän hallintaa sekoituksen satunnaisuudesta tai jos haluat käyttää mukautettua satunnaislukugeneraattoria, sekoitus () olisi parempi valinta. Toisaalta, jos et tarvitse tuollaista ohjaustasoa ja haluat vain yksinkertaisen tavan sekoittaa elementtejä, random_shuffle() voisi olla riittävä.