Shuffle() против random_shuffle() в C++

Shuffle Protiv Random Shuffle V C



В C++ стандартная библиотека предоставляет две функции: перемешать() и random_shuffle() которые используются для перестановки элементов контейнера. Хотя обе функции служат одной цели, они отличаются своей реализацией и способом генерации случайных чисел.

Из этой статьи вы найдете различия между этими двумя функциями и поймете, как они работают.

перетасовать() в С++

перемешать() function — это встроенная функция C++, используемая для случайного перемешивания или перестановки элементов в заданном диапазоне. Функция объявлена ​​в <алгоритм> заголовочный файл и имеет два аргумента: начальная позиция диапазона является первым аргументом, а второй аргумент представляет собой конечную позицию.







Кроме того, он также принимает необязательный третий параметр, который является функциональным объектом, генерирующим случайные числа, которые будут использоваться для перетасовки элементов в диапазоне.



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



Пример

Рассмотрим приведенный ниже пример использования функция перемешивания() в С++. В этой программе мы создали вектор вещь с целыми значениями от 0 до 10. Затем мы генерируем генератор случайных чисел, который затем передается вместе с диапазоном вектора в перемешать() функция. перемешать() функция берет число и меняет местами элементы на основе этого числа. Затем мы напечатали переставленную векторную последовательность, используя цикл for.





#include <иопоток>

#include <вектор>

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

#include <случайный>

#include <хроно>

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

инт основной ( )

{

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

неподписанный семя '=' хроно :: системные_часы :: сейчас ( ) . time_since_epoch ( ) . считать ( ) ;

перемешивать ( вещь. начинать ( ) , вещь. конец ( ) , default_random_engine ( семя ) ) ;

cout << 'перетасованные элементы:' ;

для ( инт & я : вещь )

cout << ' ' << я ;

cout << конец ;

возвращаться 0 ;

}

random_shuffle() в C++

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



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

Пример

Пример ниже иллюстрирует работу random_shuffle() в С++. В этом коде мы создали вектор вещь с целыми значениями от 1 до 10, а затем использовал для петли для печати случайно перетасованной последовательности:

#include <иопоток>

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

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

инт основной ( )

{

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

сранд ( static_cast < неподписанный инт > ( время ( nullptr ) ) ) ;

random_shuffle ( вещь. начинать ( ) , вещь. конец ( ) ) ;

для ( инт я : вещь ) {

cout << я << ' ' ;

}

cout << ' \n ' ;



возвращаться 0 ;

}

Разница между shuffle() и random_shuffle()

Вот основные различия между перемешать() и random_shuffle() функции на С++.

1: random_shuffle() принимает пару итераторов, представляющих диапазон элементов для перемешивания, а перемешать() принимает пару итераторов, представляющих диапазон элементов для перетасовки, а также генератор случайных чисел для перетасовки.

2: random_shuffle() обычно менее эффективен, чем перемешать() , так как он должен генерировать последовательность случайных чисел для перетасовки.

3: случайная_перетасовка() использует внутреннюю реализацию генератора случайных чисел из стандартной библиотеки C++ для перемешивания элементов, в то время как перемешать() позволяет указать собственный генератор случайных чисел для перетасовки, что дает вам больший контроль над случайностью перетасовки.

4: random_shuffle() появилась в C++98. и поддерживается всеми версиями стандартной библиотеки C++, в то время как перемешать() был введен в C++11 и поддерживается только компиляторами, реализующими эту версию стандарта.

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

Выбор между перемешать() и random_shuffle() зависит от вашего конкретного случая использования и требований. Если вам нужен больший контроль над случайностью перетасовки или если вы хотите использовать собственный генератор случайных чисел, то перемешать() будет лучшим выбором. С другой стороны, если вам не нужен такой уровень контроля и вам нужен простой способ перетасовки элементов, тогда random_shuffle() может быть достаточно.