Shuffle() срещу random_shuffle() в C++

Shuffle Sresu Random Shuffle V C



В C++ стандартната библиотека предоставя две функции, разбъркване () и random_shuffle() които се използват за пренареждане на елементите на контейнер. Въпреки че и двете функции служат за една и съща цел, те се различават по тяхното изпълнение и начина, по който генерират произволни числа.

От тази статия ще откриете разликите между тези две функции и ще разберете как работят.

shuffle() в C++

The разбъркване () е вградена C++ функция, използвана за произволно разбъркване или пренареждане на елементите в даден диапазон. Функцията е декларирана в <алгоритъм> заглавен файл и има два аргумента: началната позиция на диапазона е първият аргумент, а вторият аргумент представлява крайната позиция.







В допълнение, той също така приема незадължителен трети параметър, който е функционален обект, който генерира произволни числа, които да се използват за разбъркване на елементите в диапазона.



Когато разбъркване () функцията се извиква, тя произволно пренарежда елементите в посочения диапазон, като използва предоставения генератор на случайни числа. Резултатът от разместването не е предвидим и всяка възможна пермутация на елементите е еднакво вероятно да се случи.



Пример

Разгледайте примера по-долу за използване на shuffle() функция в C++. В тази програма създадохме вектора нещо с цели стойности от 0 до 10. След това генерираме генератор на произволни числа, който след това се предава заедно с диапазона на вектора към разбъркване () функция. The разбъркване () функцията взема числото и разменя елементите въз основа на това число. След това отпечатахме пренаредената векторна последователност, използвайки for цикъла





#include

#include <вектор>

#include <алгоритъм>

#include <случаен>

#include

използване на пространство от имена std ;

вътр основен ( )

{

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

неподписан семе = хроно :: системен_часовник :: сега ( ) . време_от_епоха ( ) . броя ( ) ;

разбъркване ( нещо. започвам ( ) , нещо. край ( ) , default_random_engine ( семе ) ) ;

cout << 'разбърканите елементи са:' ;

за ( вътр и i : нещо )

cout << ' ' << i ;

cout << endl ;

връщане 0 ;

}

random_shuffle() в C++

The random_shuffle() функция също произволно пренарежда елементите в дадения диапазон с произволно избрано число. Той използва генератор на произволни числа, за да генерира поредица от произволни числа и след това използва тези числа, за да разбърка елементите в диапазона, така че последователността на програмата ще бъде различна всеки път, когато стартирате програмата.



Необходими са два параметъра за random_shuffle() : началната позиция на диапазона е първият параметър, а вторият параметър е крайната позиция. Освен това, random_shuffle() може да приеме незадължителен трети параметър, който е функционален обект, който може да се използва за генериране на произволни числа за разбъркване на елементите.

Пример

Примерът по-долу илюстрира работата на random_shuffle() в C++. В този код създадохме a векторно нещо с цели числа от 1 до 10 и след това използва за цикъл за да отпечатате произволно разбърканата последователност:

#include

#include <алгоритъм>

използване на пространство от имена std ;

вътр основен ( )

{

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

srand ( static_cast < неподписан вътр > ( време ( nullptr ) ) ) ;

произволно_разбъркване ( нещо. започвам ( ) , нещо. край ( ) ) ;

за ( вътр i : нещо ) {

cout << i << ' ' ;

}

cout << ' ' ;



връщане 0 ;

}

Разлика между shuffle() и random_shuffle()

Ето основните разлики между разбъркване () и random_shuffle() функции в C++.

1: random_shuffle() взема чифт итератори, представящи диапазона от елементи за разбъркване, докато разбъркване () взема двойка итератори, представящи диапазона от елементи за разбъркване, както и генератор на произволни числа, който да се използва за разбъркване.

2: random_shuffle() обикновено е по-малко ефективен от разбъркване () , тъй като трябва да генерира поредица от произволни числа, които да се използват за разбъркване.

3: random_shuffle() използва вътрешната реализация на генератора на произволни числа на C++ Standard Library, за да разбърква елементите, докато разбъркване () ви позволява да посочите свой собствен генератор на произволни числа, който да използвате за разбъркване, което ви дава повече контрол върху произволността на разбъркването.

4: random_shuffle() беше въведен в C++98 и се поддържа от всички версии на C++ Standard Library, докато разбъркване () е въведен в C++11 и се поддържа само от компилатори, които прилагат тази версия на стандарта.

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

Изборът между разбъркване () и random_shuffle() зависи от вашия конкретен случай на употреба и изисквания. Ако имате нужда от повече контрол върху произволността на разбъркването или ако искате да използвате персонализиран генератор на произволни числа, тогава разбъркване () би било по-добър избор. От друга страна, ако не се нуждаете от това ниво на контрол и просто искате лесен начин за разбъркване на елементи, тогава random_shuffle() може да е достатъчно.