#include <algorithm>
#include <vector>
#include <iostream>
#include <random>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::mt19937 generator(std::random_device{}());
std::shuffle(vec.begin(), vec.end(), generator);
for (int num : vec) {
std::cout << num << " ";
std::cout << std::endl;
return 0;
random−shuffle算法\color{blue} random-shuffle算法random−shuffle算法
在STL中,函数random_shuffle()用来对一个元素序列进行随机排序。
函数原型如下:
template<class RandomAccessIterator>
void random_shuffle(
RandomAccessIterator _...
重排序给定范围 [first, last) 中的元素,使得这些元素的每个排列拥有相等的出现概率。
1) 随机数生成器是实现定义的,但经常使用函数 std::rand 。
2) 随机数生成器为函数对象 r 。
3) 随机数生成器为函数对象 g 。
STL中的函数random_shuffle()用来对一个元素序列进行重新排序(随机的)
srand(time(0)); 这个是设置时间种子,加了这句才能保证每次都是随机的,不然就不太随机。
#include<bits/stdc++.h>
using namespace std;
int main()
srand(time(0));
int a[5] = {5,2,2,4,1};
random_shuffle.
std::random_device
random_device 类定义的函数对象可以生成用来作为种子的随机的无符号整数值。
std::random_device rd;
构造函数有一个 string& 类型的参数,它有定义的默认值。在我们像这样省略它时,会得到我们环境中默认的 random_device 对象。
用 random_device 对象生成一个种子值:
auto see...
//STL中的函数random_shuffle()用来对一个元素序列进行重新排序(随机的),函数原型如下:
/* template <class RandomAccessIterator>
void random_shuffle(
RandomAccessIterator _First, //指向序列首元素的迭代器
RandomAccess...
本文介绍了STL中的变序类算法(mutating algorithm)里面的洗牌算法:std::random_shuffle和std::shuffle.
random_shuffle算法在C++11之前就已经存在,C++11之后由于右值引用的引入,它的使用范围变大了。
shuffle算法则是从C++11之后才开始出现,可以与随机数和分布库一起使用。
与本系列的其他文章一样,本文介绍该最新的使用方法,比如rand