我有一个使用random_shuffle
生成非重复随机数的函数。我希望将该功能调用n次并使其生成n个不同列表的非重复随机数。我很确定我必须使用srand
函数,但我不确定如何。
// random generator function:
int myrandom (int i) { return std::rand()%i;}
void dealCards();
int main () {
for (int i=0; i<10; i++) {
dealCards();
}
return 0;
}
void dealCards(){
std::srand ( unsigned ( std::time(0) ) );
std::vector<int> myvector;
int myarray[32];
// set some values:
for (int i=1; i<33; ++i) myvector.push_back(i); // 1 2 3 4 5 6 7 8 9
// using myrandom:
std::random_shuffle ( myvector.begin(), myvector.end(), myrandom);
std::cout << "myvector contains:";
std::srand ( unsigned (std::time(0)) );
for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it){
std::cout << ' ' << *it;
}
std::cout << '\n' << '\n';
}
答案 0 :(得分:1)
这是一个srand函数,可以使结果为您提供一些广泛使用的伪随机数:
srand(time(NULL));
您只能为随机值生成器播种一次,因此请勿将其置于循环中 如果你这样做,它将无法正常运作。
答案 1 :(得分:1)
你应该只对随机生成器播种一次。
移动
std::srand ( unsigned ( std::time(0) ) );
进入main。
如果你的函数在不到一秒的时间内执行,你下次将使用相同的种子重新生成生成器,为你提供相同的序列。