描述:
随机重排容器中的元素。
定义:
template< class RandomIt, class URBG >
void shuffle( RandomIt first, RandomIt last, URBG&& g );
可能的实现:
template<class RandomIt, class URBG>
void shuffle(RandomIt first, RandomIt last, URBG&& g)
{
typedef typename std::iterator_traits<RandomIt>::difference_type diff_t;
typedef std::uniform_int_distribution<diff_t> distr_t;
typedef typename distr_t::param_type param_t;
distr_t D;
diff_t n = last - first;
for (diff_t i = n-1; i > 0; --i) {
using std::swap;
swap(first[i], first[D(g, param_t(0, i))]);
}
}
参数:
first, last - 要随机打乱的元素范围
g - 均匀随机位生成器。g可以是std::random_device
或者像std::default_random_engine
这样的随机数引擎,也可以是std::mt19937
这样的标准库提供的随机数生成器的对象,它们都在<random>
中。
返回值:
无
示例:
#include <iostream>
#include <algorithm>
#include <vector>
#include <random>
int main()
{
std::vector<int> v = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
std::random_device rd;
std::shuffle(v.begin(), v.end(), rd);
for (int i = 0; i < v.size(); i++)
std::cout << v[i] << " ";
std::cout << std::endl;
//8 3 5 2 0 9 1 6 4 7
return 0;
}