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

标签 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;
}

这会生成一个从 0 到 255 的整数数组。每个整数在数组中只出现一次。我的问题是这段代码需要相当长的时间来执行,因为对于每个新的随机整数,我都会检查该整数是否已经在数组中。所以我必须等到从 0 到 255 的所有整数都显示为随机数。我的问题是:

有更好的方法吗?

最佳答案

正如其他人提到的,使用 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());

关于c++ - 如何生成 256 个不同数字的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21948091/

相关文章:

javascript - 在 Mongoose 中一次执行多个查询

c - 在动态分配的二维数组上使用 realloc() 是个好主意吗?

python - 来自二维概率 numpy 数组的样本?

python - 在 python 中使用 random.Random(0) 保持模拟确定性时遇到问题

c++ - MFC Tab 顺序以编程方式

c++ - 在磁盘上/从磁盘存储/加载 C++ 对象

c++ - 使用 #include <vector> 无法检查 R 包

c++ - 指针和数组指向数组问题

python - 如何使用Python `secret`模块生成随机整数?

c++ - 如何很好地将 "cast"qint64 转换为 QProgressBar 的 int