La funzione std::shuffle è stata introdotta in C++ 11:Qual è la differenza tra riordino e random_shuffle C++
template< class RandomIt, class URNG >
void shuffle(RandomIt first, RandomIt last, URNG&& g);
ed ha la stessa firma uno dei sovraccarichi di std::random_shuffle anch'esso introdotto in C++ 11:
template< class RandomIt, class RandomFunc >
void random_shuffle(RandomIt first, RandomIt last, RandomFunc&& r);
la differenza è nel terzo parametro dove:
URNG deve soddisfare i requisiti di UniformRandomNumberGenerator
È tutto? La differenza è che solo lo shuffle
esegue un controllo extra di compilazione? Il comportamento è lo stesso?
Btw, nello standard "X deve soddisfare i requisiti di Y" non significa che l'implementazione lo controlli. Significa che il comportamento non è definito se X non soddisfa i requisiti di Y. In qualsiasi codice di modello ci sarà un controllo in fase di compilazione, ma di solito solo delle parti dell'interfaccia Y che l'implementazione utilizza effettivamente. –
http://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful – doctorlove