在确定的时间内生成某些数字的随机序列

ehs*_*dam 1 c++ random

我编写了以下代码来生成某些数字{0,1,2,...,31}的随机序列.它工作正常,但不能保证在任何有限的时间内完成; 在任何间隔之后,仍然只有一定(非常高)的概率将完成.有关删除此问题的任何建议吗?

int th;
vector<int> V2 = vector<int> (32,0);
for (int k=0;k<32;k++){

    do{
        th = rand() % 32;
    } while ( V2[th] == 0 );

    V2[th] = k;
}
Run Code Online (Sandbox Code Playgroud)

小智 7

并且实际实施:

int a[] = { 0, 1, 2, ....., 31 };
std::random_shuffle(a, a + 32);
Run Code Online (Sandbox Code Playgroud)

或与矢量:

std::vector<int> v(a, a + 32); // from previous snippet
std::random_shuffle(v.begin(), v.end());
Run Code Online (Sandbox Code Playgroud)

此外,通常情况下,如果您想要真正的随机排列,请不要忘记播种PRNG.