关闭

使用random_shuffle()算法随机化序列元素

1051人阅读 评论(0) 收藏 举报

      以前只知道产生随机数用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等序列。说明此函数可能是对连续内存进行的随机排序(猜测),
  所以内存不连续的不行。
 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:87986次
    • 积分:1303
    • 等级:
    • 排名:千里之外
    • 原创:43篇
    • 转载:6篇
    • 译文:0篇
    • 评论:26条
    文章分类
    最新评论