c++关于random_shuffle的问题。

#include<iostream>#include<cstdlib>//#include<iomanip>//#include<string>//#include<cs... #include<iostream>
#include<cstdlib>
//#include<iomanip>
//#include<string>
//#include<cstring>
//#include<cstdarg>
//#include<ctype.h>
//#include<conio.h>
#include<vector>
//#include<deque>
//#include<list>
//#include<set>
//#include<map>
#include<algorithm>

using namespace std;

//typedef
typedef int I;
typedef char C;

//宏定义
#define N 3
#define X(a,b) (((a)+(b))*3)

//自定义函数声明
void f1();
void f2();
void output(I);

//主函数
int main(int argc,char * argv[])
{
f1();
cout<<endl;
f2();
cout<<endl;
cout<<argc<<ends<<* argv<<endl;
system("pause");
return 0;
}

//自定义函数
void f1()
{
//定义vector对象
vector<I> intVector;
for(I i=0;i<10;i++)
{
//push_back()
intVector.push_back(i);
}
cout<<"Vect:";
//for_each
for_each(intVector.begin(),intVector.end(),output);
//random_shuffle
random_shuffle(intVector.begin(),intVector.end());
cout<<endl;
cout<<"Vect:";
//for_each()
for_each(intVector.begin(),intVector.end(),output);
}

void output(I x)
{
cout<<x<<endl;
}

void f2()
{
I arr[5]={1,2,3,4,5};
cout<<"arr:";
for(I i=0;i<5;i++)
{
cout<<arr[i]<<ends;
}
cout<<endl;
//random_shuffle
random_shuffle(& arr[0],& arr[5]);
cout<<"arr:";
for(I i=0;i<5;i++)
{
cout<<arr[i]<<ends;
}
cout<<endl;
}
为什么每次的随机结果都一样?
展开
 我来答
beddy1
推荐于2016-03-28 · TA获得超过1989个赞
知道大有可为答主
回答量:2271
采纳率:0%
帮助的人:2205万
展开全部
默认的random_shuffle用的是和rand()一样的随机数发生器,所以你需要用srand()来设置随机数种子。
追问
不明白,能否详细说一下原理用法,谢谢!
追答
就是在用random_shuffle之前,调srand(timeGetTime())设种子

原理很简单,随机数是通过一个算法产生的,当它的初始种子确定后,后面的序列是一定的。要让它变化,只能通过srand重设种子,同时种子要与时间相关,这样就达到随机了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式