Shuffle() vs random_shuffle() w C++

Shuffle Vs Random Shuffle W C



W C++ biblioteka standardowa udostępnia dwie funkcje: człapać() I random_shuffle() które służą do zmiany układu elementów kontenera. Chociaż obie funkcje służą temu samemu celowi, różnią się implementacją i sposobem generowania liczb losowych.

W tym artykule znajdziesz różnice między tymi dwiema funkcjami i zrozumiesz, jak działają.

shuffle() w C++

The człapać() function jest wbudowaną funkcją C++ używaną do losowego tasowania lub zmiany kolejności elementów w danym zakresie. Funkcja jest zadeklarowana w nagłówkowy i ma dwa argumenty: pozycja początkowa zakresu jest pierwszym argumentem, a drugi argument reprezentuje pozycję końcową.







Ponadto wymaga również opcjonalnego trzeciego parametru, który jest obiektem funkcji generującym liczby losowe, które mają być używane do tasowania elementów w zakresie.



Kiedy człapać() funkcja jest wywoływana, losowo zmienia kolejność elementów w określonym zakresie za pomocą dostarczonego generatora liczb losowych. Wynik przetasowania nie jest przewidywalny, a każda możliwa permutacja elementów jest równie prawdopodobna.



Przykład

Rozważ poniższy przykład użycia funkcja shuffle(). w C++. W tym programie stworzyliśmy wektor rzecz o wartościach całkowitych od 0 do 10. Następnie generujemy generator liczb losowych, który wraz z zakresem wektora jest przekazywany do człapać() funkcjonować. The człapać() funkcja pobiera liczbę i zamienia elementy na podstawie tej liczby. Następnie wydrukowaliśmy uporządkowaną sekwencję wektorów za pomocą pętli for





#include

#uwzględnij

#include

#włącz

#include

przy użyciu przestrzeni nazw std ;

int główny ( )

{

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

niepodpisany nasionko = chrono :: zegar systemowy :: Teraz ( ) . czas_od_epoki ( ) . liczyć ( ) ;

człapać ( rzecz. zaczynać ( ) , rzecz. koniec ( ) , domyślny_losowy_silnik ( nasionko ) ) ;

cout << „przetasowane elementy to:” ;

Do ( int & I : rzecz )

cout << '' << I ;

cout << koniec ;

powrót 0 ;

}

random_shuffle() w C++

The random_shuffle() funkcja również losowo przestawia elementy w podanym zakresie z losowo wybraną liczbą. Używa generatora liczb losowych do generowania sekwencji liczb losowych, a następnie używa tych liczb do przetasowania elementów w zakresie, więc sekwencja programu będzie inna za każdym razem, gdy uruchomisz program.



Wymagane są dwa parametry random_shuffle() : pozycją początkową zakresu jest pierwszy parametr, a drugim parametrem jest pozycja końcowa. Dodatkowo, random_shuffle() może przyjąć opcjonalny trzeci parametr, który jest obiektem funkcji, którego można użyć do generowania liczb losowych do tasowania elementów.

Przykład

Poniższy przykład ilustruje działanie programu random_shuffle() w C++. W tym kodzie stworzyliśmy plik wektor z liczbami całkowitymi od 1 do 10, a następnie użył dla pętli aby wydrukować losowo przetasowaną sekwencję:

#include

#include

przy użyciu przestrzeni nazw std ;

int główny ( )

{

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

srand ( static_cast < niepodpisany int > ( czas ( nullptr ) ) ) ;

random_shuffle ( rzecz. zaczynać ( ) , rzecz. koniec ( ) ) ;

Do ( int I : rzecz ) {

cout << I << ' ' ;

}

cout << ' \N ' ;



powrót 0 ;

}

Różnica między shuffle() a random_shuffle()

Oto kluczowe różnice między człapać() I random_shuffle() funkcje w C++.

1: random_shuffle() pobiera parę iteratorów reprezentujących zakres elementów do przetasowania, podczas gdy człapać() pobiera parę iteratorów reprezentujących zakres elementów do przetasowania, a także generator liczb losowych do użycia do przetasowania.

2: random_shuffle() jest na ogół mniej wydajny niż człapać() , ponieważ musi wygenerować sekwencję liczb losowych do użycia podczas tasowania.

3: random_shuffle() wykorzystuje wewnętrzną implementację generatora liczb losowych biblioteki standardowej C++ do przetasowania elementów, podczas gdy człapać() umożliwia określenie własnego generatora liczb losowych, który ma być używany do tasowania, co daje większą kontrolę nad losowością tasowania.

4: random_shuffle() została wprowadzona w C++98 i jest obsługiwana przez wszystkie wersje standardowej biblioteki C++, podczas gdy człapać() został wprowadzony w C++ 11 i jest obsługiwany tylko przez kompilatory, które implementują tę wersję standardu.

Końcowe przemyślenia

Wybór pomiędzy człapać() I random_shuffle() zależy od konkretnego przypadku użycia i wymagań. Jeśli potrzebujesz większej kontroli nad losowością tasowania lub jeśli chcesz użyć niestandardowego generatora liczb losowych, to człapać() byłby lepszym wyborem. Z drugiej strony, jeśli nie potrzebujesz takiego poziomu kontroli i chcesz po prostu prostego sposobu na tasowanie elementów, to wtedy random_shuffle() mogłoby wystarczyć.