Из этой статьи вы найдете различия между этими двумя функциями и поймете, как они работают.
перетасовать() в С++
перемешать() 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() может быть достаточно.