V tomto článku najdete rozdíly mezi těmito dvěma funkcemi a pochopíte, jak fungují.
shuffle() v C++
The zamíchat() funkce je vestavěná funkce C++ používaná k náhodnému promíchání nebo přeskupení prvků v daném rozsahu. Funkce je deklarována v
Kromě toho také přebírá volitelný třetí parametr, což je funkční objekt, který generuje náhodná čísla, která se mají použít k zamíchání prvků v rozsahu.
Když zamíchat() Pokud je zavolána funkce, náhodně změní pořadí prvků v určeném rozsahu pomocí poskytnutého generátoru náhodných čísel. Výsledek míchání není předvídatelný a každá možná permutace prvků je stejně pravděpodobná.
Příklad
Zvažte níže uvedený příklad použití funkce shuffle(). v C++. V tomto programu jsme vytvořili vektor věc s celočíselnými hodnotami 0 až 10. Poté vygenerujeme generátor náhodných čísel, který se pak předá spolu s rozsahem vektoru zamíchat() funkce. The zamíchat() funkce vezme číslo a vymění prvky na základě tohoto čísla. Potom jsme vytiskli přeskupenou vektorovou sekvenci pomocí cyklu for
#include
#include
#include
#include
#include
pomocí jmenného prostoru std ;
int hlavní ( )
{
vektor < int > věc { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;
nepodepsaný semínko = chrono :: systémové_hodiny :: Nyní ( ) . čas_od_epochy ( ) . počet ( ) ;
zamíchat ( věc. začít ( ) , věc. konec ( ) , default_random_engine ( semínko ) ) ;
cout << 'zamíchané prvky jsou:' ;
pro ( int & i : věc )
cout << ' ' << i ;
cout << endl ;
vrátit se 0 ;
}
random_shuffle() v C++
The random_shuffle() funkce také náhodně přeskupí prvky v daném rozsahu pomocí nějakého náhodně vybraného čísla. Využívá generátor náhodných čísel ke generování posloupnosti náhodných čísel a poté tato čísla používá k zamíchání prvků v rozsahu, takže posloupnost programu bude při každém spuštění programu jiná.
Jsou vyžadovány dva parametry random_shuffle() : počáteční pozice rozsahu je první parametr a druhý parametr je koncová pozice. Dodatečně, random_shuffle() může mít volitelný třetí parametr, což je funkční objekt, který lze použít ke generování náhodných čísel pro míchání prvků.
Příklad
Níže uvedený příklad ilustruje fungování random_shuffle() v C++. V tomto kódu jsme vytvořili a vector věc s celočíselnými hodnotami od 1 do 10 a poté použil pro smyčku pro tisk náhodně zamíchané sekvence:
#include#include
pomocí jmenného prostoru std ;
int hlavní ( )
{
vektor < int > věc { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;
srand ( static_cast < nepodepsaný int > ( čas ( nullptr ) ) ) ;
náhodné_zamíchat ( věc. začít ( ) , věc. konec ( ) ) ;
pro ( int i : věc ) {
cout << i << '' ;
}
cout << ' \n ' ;
vrátit se 0 ;
}
Rozdíl mezi shuffle() a random_shuffle()
Zde jsou klíčové rozdíly mezi zamíchat() a random_shuffle() funkce v C++.
1: random_shuffle() vezme dvojici iterátorů představujících rozsah prvků, které se mají zamíchat, zatímco zamíchat() bere dvojici iterátorů reprezentujících rozsah prvků, které se mají zamíchat, a také generátor náhodných čísel, který se má pro míchání použít.
2: random_shuffle() je obecně méně efektivní než zamíchat() , protože musí generovat sekvenci náhodných čísel, která se použije pro míchání.
3: random_shuffle() používá interní implementaci generátoru náhodných čísel standardní knihovny C++ k promíchání prvků zamíchat() umožňuje určit vlastní generátor náhodných čísel, který se má použít pro míchání, což vám dává větší kontrolu nad náhodností míchání.
4: random_shuffle() bylo zavedeno v C++98 a je podporován všemi verzemi standardní knihovny C++ zamíchat() byl představen v C++11 a je podporován pouze kompilátory, které implementují tuto verzi standardu.
Závěrečné myšlenky
Volba mezi zamíchat() a random_shuffle() závisí na vašem konkrétním případu použití a požadavcích. Pokud potřebujete větší kontrolu nad náhodností míchání nebo pokud chcete použít vlastní generátor náhodných čísel, pak zamíchat() by byla lepší volba. Na druhou stranu, pokud nepotřebujete takovou úroveň kontroly a chcete jen jednoduchý způsob, jak zamíchat prvky, pak random_shuffle() by mohlo být dostačující.