如何生成256个不同数字的数组

Tho*_*mas 1 c++ arrays random

我有这个:

#include <iostream>    
using namespace std;   
int main()
{
    int a[256];
    int b;
    int k;
    for (int i = 0; i < 256; i ++){
    b = rand()%256;
    k = 0;
        for (int j = 0; j< i; j ++)
        {
            if (a[j] == b){k = 1;}  
        }
    if (k == 0){a[i] = b;}
    if (k==1){i--;}
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这将生成一个0到255之间的整数数组.每个整数只在数组中出现一次.我的问题是这段代码需要很长时间才能执行,因为对于每个新的随机整数,我检查整数是否已经在数组中.所以我必须等到0到25​​5之间的所有整数都显示为随机数.我的问题是:

有没有更好的方法来做到这一点?

Mat*_*jek 6

正如其他人提到的那样,使用std :: random_shuffle:

std::vector<int> my_vec(256); //Reserve space for 256 numbers in advance.

for(int n = 0; n < 256; ++n)
{
  my_vec.push_back(n);
}

std::random_shuffle(my_vec.begin(), my_vec.end());
Run Code Online (Sandbox Code Playgroud)