在另一个函数内调用随机函数

ker*_*ssa 1 c++ random function

我有这样的功能,使我像这样随机索引:

size_t randomIndex(vector<int>myVector) {
    srand(time(NULL));
    size_t index1 = rand() % myVector.size();
    return index1; 
}
Run Code Online (Sandbox Code Playgroud)

我称之为另一个功能:

void generaTwoIndex(vector<int> myVector2) {
     size_t index1 = randomIndex(myVector2); 
     cout << "index1 = " << index1 << endl; 
     size_t index2 = randomIndex(myVector2);
     cout << "index2 = " << index2 << endl;
}
Run Code Online (Sandbox Code Playgroud)

它生成了相同的索引.有什么问题?提前感谢你的答案.

小智 7

time(NULL)返回自1970年以来的秒数.由于您在调用之间连续两次调用函数,因此time(NULL)在两次调用之间返回相同的值,并且RNG的两个调用都使用相同的值.

生成随机数时,生成器会自动生成其结果.所以你只需要播种一次:

size_t randomIndex(vector<int>myVector) {
    size_t index1 = rand() % myVector.size();
    return index1; 
}

void generaTwoIndex(vector<int> myVector2) {
    srand(time(NULL));    //I would recommend moving this line to main()
    size_t index1 = randomIndex(myVector2); 
    cout << "index1 = " << index1 << endl; 
    size_t index2 = randomIndex(myVector2);
    cout << "index2 = " << index2 << endl;
}
Run Code Online (Sandbox Code Playgroud)