Was ist der Unterschied zwischen shuffle und random_shuffle c ++?

Die Funktionstd :: shuffle wurde in C ++ 11 eingeführt:

template< class RandomIt, class URNG >
void shuffle( RandomIt first, RandomIt last, URNG&& g );

und es hat die gleiche Signatur wie eine der Überladungen vonstd :: random_shuffle was auch in C ++ 11 eingeführt wurde:

template< class RandomIt, class RandomFunc >
void random_shuffle( RandomIt first, RandomIt last, RandomFunc&& r );

Der Unterschied liegt im dritten Parameter, wo:

URNG muss die Anforderungen von UniformRandomNumberGenerator erfüllen

Ist das alles? Ist der Unterschied nur dasshuffle führt eine zusätzliche Prüfung der Kompilierungszeit durch? Ist das Verhalten ansonsten das gleiche?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage