Random Access Example template void random_shuffle(RI begin, RI end) { if (begin == end) return; for (RI i = begin + 1; i != end; ++i) { RI other = begin + nrand(i - begin + 1); swap(*i, *other); } }