Die Funktion std::shuffle wurde in C++ 11 eingeführt:Was ist der Unterschied zwischen Shuffle und random_shuffle C++
template< class RandomIt, class URNG >
void shuffle(RandomIt first, RandomIt last, URNG&& g);
und es hat die gleiche Signatur als eine der Überlastungen von std::random_shuffle die auch eingeführt wurde in C++ 11:
template< class RandomIt, class RandomFunc >
void random_shuffle(RandomIt first, RandomIt last, RandomFunc&& r);
die Differenz ist in dem dritten Parameter, wobei:
URNG muss erfüllen die Anforderungen von UniformRandomNumberGenerator
Ist das alles? Ist der Unterschied nur, dass shuffle
eine zusätzliche Kompilierzeitprüfung durchführt? Ist das Verhalten sonst gleich?
Btw, in der Norm "X muss die Anforderungen von Y erfüllen" bedeutet nicht, dass die Implementierung es überprüft. Dies bedeutet, dass das Verhalten nicht definiert ist, wenn X die Anforderungen von Y nicht erfüllt. In jedem Vorlagencode wird eine gewisse Überprüfung der Kompilierungszeit durchgeführt, aber in der Regel nur die Teile der Schnittstelle Y, die die Implementierung tatsächlich verwendet. –
http://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful – doctorlove