std::random_shuffle,std::shuffle (3) - Linux Manuals
std::random_shuffle,std::shuffle: std::random_shuffle,std::shuffle
NAME
std::random_shuffle,std::shuffle - std::random_shuffle,std::shuffle
Synopsis
Defined in header <algorithm>
template< class RandomIt > (1) (deprecated in C++14)
void random_shuffle( RandomIt first, RandomIt last ); (removed in C++17)
template< class RandomIt, class RandomFunc > (until C++11)
void random_shuffle( RandomIt first, RandomIt last, RandomFunc& r );
template< class RandomIt, class RandomFunc > (since C++11)
void random_shuffle( RandomIt first, RandomIt last, RandomFunc&& r ); (2) (deprecated in C++14)
template< class RandomIt, class URBG > (3) (since C++11)
void shuffle( RandomIt first, RandomIt last, URBG&& g );
Reorders the elements in the given range [first, last) such that each possible permutation of those elements has equal probability of appearance.
1) The random number generator is implementation-defined, but the function std::rand is often used.
2) The random number generator is the function object r.
3) The random number generator is the function object g.
Parameters
first, last - the range of elements to shuffle randomly
r - function object returning a randomly chosen value of type convertible to std::iterator_traits<RandomIt>::difference_type in the interval [0,n) if invoked as r(n)
g - a UniformRandomBitGenerator whose result type is convertible to std::iterator_traits<RandomIt>::difference_type
Type requirements
-
RandomIt must meet the requirements of ValueSwappable and LegacyRandomAccessIterator.
-
std::remove_reference_t<URBG> must meet the requirements of UniformRandomBitGenerator.
Return value
(none)
Complexity
Linear in the distance between first and last
Notes
Note that the implementation is not dictated by the standard, so even if you use exactly the same RandomFunc or URBG you may get different results with different standard library implementations.
Possible implementation
First version
Second version
Third version