使用 Xcode 在 Mac 上用 c++ 生成随机数时遇到问题

Trouble generating random numbers in c++ on a Mac using Xcode

我正在编写一个以不同方式广泛使用随机数的程序,并且我每次都得到相同的随机数。我知道将 srand(time(NULL)); 放在程序的开头以播种随机数生成器,所以我有它,但它不起作用。也许它与 XCode 或 Mac 或其他什么有关?我在网上找不到类似的问题,我有一个我还没有尝试过的解决方案。我使用随机数的一些方法是:

for (int i=0; i<num; i++)
{
    chrom_arr[i] = i;
}
random_shuffle(&chrom_arr[0], &chrom_arr[num-1]);

(获取一个包含一系列介于 0 和 num-1 之间的随机整数的数组)

int crossover = rand() % num;

和其他类似的简单事情。即使我开头有 srand(time(NULL)); ,它仍然不起作用。我也试过 srand(time(0)); 并将它放在程序的不同部分,但后来我知道这是不对的。

Alex,你能不能 post 一个小而完整的程序,每次你 运行 它都无法生成不同的随机数?我很想看看...

这是一个(当然)确实每次在我的Mac上运行产生不同的数字:

#include <iostream>
#include <ctime>
#include <cstdlib>

int main()
{
    srand(time(NULL));
    for (int i = 0; i < 10; ++i)
        std::cout << rand() % 10 << std::endl;
    return 0;
}

如果在计算机上多次编译并 运行 它会做什么?

更新:

我以为你的意思是 srand() + rand() 每次都产生相同的数字。那不是真的。但是,您对 srand() + random_shuffle() 的行为是正确的:它确实可能每次都产生相同的数字,具体取决于您的编译器。它也适用于我的编译器(Mac 上的 clang)。

这是解释here

你应该尝试这样的事情:

srand(static_cast<unsigned int>(time(0)));
std::shuffle(chrom_arr.begin(), chrom_arr.end(), default_random_engine(rand()));

只要 chrom_arrstd::vector,这就会起作用。一旦您使用了 C++,我认为这就是您想要做的。