Схуффле() наспрам рандом_схуффле() у Ц++

Shuffle Naspram Random Shuffle U C



У Ц++ стандардна библиотека пружа две функције, мешање() и рандом_схуффле() који се користе за преуређивање елемената контејнера. Иако обе функције служе истој сврси, оне се разликују по имплементацији и начину на који генеришу случајне бројеве.

Из овог чланка ћете пронаћи разлике између ове две функције и разумети како оне функционишу.

схуффле() у Ц++

Тхе мешање() функција је уграђена Ц++ функција која се користи за насумично мешање или преуређивање елемената у датом опсегу. Функција је декларисана у <алгоритам> заглавље датотеке и има два аргумента: почетна позиција опсега је први аргумент, а други аргумент представља крајњу позицију.







Поред тога, он такође узима опциони трећи параметар, који је функционални објекат који генерише насумичне бројеве који ће се користити за мешање елемената у опсегу.



Када мешање() функција, она насумично мења редослед елемената у наведеном опсегу користећи обезбеђени генератор случајних бројева. Резултат мешања није предвидљив и свака могућа пермутација елемената је подједнако вероватна.



Пример

Размотрите доњи пример коришћења схуффле() функција у Ц++. У овом програму смо креирали вектор ствар са целобројним вредностима од 0 до 10. Затим генеришемо генератор случајних бројева, који се затим преноси заједно са опсегом вектора у мешање() функција. Тхе мешање() функција узима број и мења елементе на основу овог броја. Затим смо одштампали преуређену векторску секвенцу користећи фор петљу





#инцлуде <иостреам>

#инцлуде <вектор>

#инцлуде <алгоритам>

#инцлуде <случајно>

#инцлуде <цхроно>

користећи простор имена стд ;

инт главни ( )

{

вектор < инт > ствар { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;

непотписан семе = цхроно :: систем_цлоцк :: Сада ( ) . тиме_синце_епоцх ( ) . цоунт ( ) ;

мешање ( ствар. започети ( ) , ствар. крај ( ) , дефаулт_рандом_енгине ( семе ) ) ;

цоут << 'промешани елементи су:' ;

за ( инт & и : ствар )

цоут << '' << и ;

цоут << ендл ;

повратак 0 ;

}

рандом_схуффле() у Ц++

Тхе рандом_схуффле() функција такође насумично преуређује елементе у датом опсегу са неким насумично изабраним бројем. Користи генератор случајних бројева за генерисање низа насумичних бројева, а затим користи те бројеве за мешање елемената у опсегу, тако да ће редослед програма бити другачији сваки пут када покренете програм.



Потребна су два параметра за рандом_схуффле() : почетна позиција опсега је први параметар, а други параметар је крајња позиција. Поред тога, рандом_схуффле() може узети опциони трећи параметар, који је функционални објекат који се може користити за генерисање случајних бројева за мешање елемената.

Пример

Пример у наставку илуструје рад рандом_схуффле() у Ц++. У овом коду смо креирали а векторска ствар са целим вредностима од 1 до 10, а затим користи за петљу за штампање насумично измешаног низа:

#инцлуде <иостреам>

#инцлуде <алгоритам>

користећи простор имена стд ;

инт главни ( )

{

вектор < инт > ствар { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;

сранд ( статиц_цаст < непотписан инт > ( време ( нуллптр ) ) ) ;

рандом_схуффле ( ствар. започети ( ) , ствар. крај ( ) ) ;

за ( инт и : ствар ) {

цоут << и << ' ' ;

}

цоут << ' ' ;



повратак 0 ;

}

Разлика између схуффле() и рандом_схуффле()

Ево кључних разлика између мешање() и рандом_схуффле() функције у Ц++.

1: рандом_схуффле() узима пар итератора који представљају опсег елемената за мешање, док мешање() узима пар итератора који представљају опсег елемената за мешање, као и генератор случајних бројева који се користи за мешање.

2: рандом_схуффле() генерално је мање ефикасан од мешање() , јер мора да генерише низ насумичних бројева који ће се користити за мешање.

3: рандом_схуффле() користи интерну имплементацију генератора случајних бројева Ц++ стандардне библиотеке за мешање елемената, док мешање() омогућава вам да наведете сопствени генератор случајних бројева који ћете користити за мешање, дајући вам већу контролу над случајношћу мешања.

4: рандом_схуффле() је уведен у Ц++98 и подржавају га све верзије Ц++ стандардне библиотеке, док мешање() је уведен у Ц++11 и подржавају га само преводиоци који имплементирају ту верзију стандарда.

Последње мисли

Избор између мешање() и рандом_схуффле() зависи од вашег специфичног случаја употребе и захтева. Ако вам је потребна већа контрола над насумичношћу мешања, или ако желите да користите прилагођени генератор случајних бројева, онда мешање() био би бољи избор. С друге стране, ако вам не треба тај ниво контроле и само желите једноставан начин да измешате елементе, онда рандом_схуффле() могло бити довољно.