В С++ 11 была введена функция std:: shuffle:
template< class RandomIt, class URNG >
void shuffle( RandomIt first, RandomIt last, URNG&& g );
и имеет ту же подпись, что и одна из перегрузок std:: random_shuffle, которая также была введена в С++ 11:
template< class RandomIt, class RandomFunc >
void random_shuffle( RandomIt first, RandomIt last, RandomFunc&& r );
Разница заключается в третьем параметре, где:
URNG должен удовлетворять требованиям UniformRandomNumberGenerator
Это все? Разница только в том, что shuffle
выполняет дополнительную проверку времени компиляции? Является ли поведение иначе одинаковым?