以前只知道产生随机数用rand()。今天在修改别人程序时无意看到这么一个函数 random_shuffle(()。上网一查原来还可以这么产生随机数列。采用rand()产生一定范围内的随机数是并不是绝对的平均,可能有些数多有些shus产生指定范围内的随机元素集的最佳方法是创建一个顺序序列(也就是向量或者内置数组),在这个顺序序列中含有指定范围的所有值。例如,如何你需要产生100个0-99之间的数,那么就创建一个向量并用100个按升序排列的数填充向量.
std::vector<int> vectorList;
for (int i=0; i<10; i++)
{
vectorList.push_back(i);
}
填充完向量之后,用random_shuffle()算法打乱元素排列顺序。random_shuffle()定义在标准的头文件<algorithm.h>中。random_shuffle()有两个参数,第一个参数是指向序列首元素的迭代器,第二个参数则指向序列最后一个元素的下一个位置。
random_shuffle(vectorList.begin(), vectorList.end());
对于数组也可以采用这种方法:
int a[10];
for (int i=0; i<10; i++)
{
a[i] = i;
}
random_shuffle(a, a+10);
for (int i=0; i<10;i++)
{
cout<<a[i];
}
注意:
1、是个完全通用的算法-适用于内建的数据类型和用户自定义类型。
2、必须是向量或数组,不能使list等序列。说明此函数可能是对连续内存进行的随机排序(猜测),
所以内存不连续的不行。
今天的文章使用random_shuffle()算法随机化序列元素分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/33139.html