28 Algorithms library [algorithms]

28.6 Mutating sequence operations [alg.modifying.operations]

28.6.13 Shuffle [alg.random.shuffle]

template<class RandomAccessIterator, class UniformRandomBitGenerator> void shuffle(RandomAccessIterator first, RandomAccessIterator last, UniformRandomBitGenerator&& g);

Requires: RandomAccessIterator должны удовлетворять требованиям ValueSwappable. Тип remove_­reference_­t<UniformRandomBitGenerator> должен соответствовать требованиям uniform random bit generator типа, в который можно преобразовать возвращаемый тип iterator_­traits<RandomAccessIterator>​::​difference_­type.

Effects: Переставляет элементы в диапазоне [first, last) таким образом, чтобы каждая возможная перестановка этих элементов имела равную вероятность появления.

Complexity: Ровно (last - first) - 1 свопы.

Remarks: В той степени, в которой реализация этой функции использует случайные числа, объект g должен служить источником случайности реализации.