gpt4 book ai didi

c++ - random_shuffle 和 srand() 每次都给我相同的结果

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:33:57 31 4
gpt4 key购买 nike

我正在尝试对字母表的随机排列进行一些处理,但是尽管使用了 srand(myseed),但每个排列都会产生相同的结果
我已经包含了 <algorithm> header 。

string create_permutation(unsigned seed)
{
srand(seed);
string permutation = ALPHABET;
random_shuffle(permutation.begin(), permutation.end());
return permutation;
}

cout << create_permutation(2) << endl; // or 3, 4, 5 etc
// continuously returns 'XQACKHSLOJ,TRBZNGV.W FIUEYDMP

如有任何帮助,我们将不胜感激。

编辑:最小、完整且可验证的示例

编辑 2: 对 mcve 的调整

#include <iostream>
#include <algorithm>

using namespace std;

const string ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ.,' ";
string create_permutation(unsigned seed)
{
srand(seed);
string permutation = ALPHABET;
random_shuffle(permutation.begin(), permutation.end());
return permutation;
}

int main(){
cout << create_permutation(2) << endl; // or 3, 4, 5 etc
// continuously returns 'XQACKHSLOJ,TRBZNGV.W FIUEYDMP
return 0;
}

最佳答案

问题

  • 洗牌不是随机的,因为 shuffle_random每次调用时都为随机数生成器使用相同的种子。

srand不播种 random_shuffle功能,它播种randrandom_shuffle 通常调用rand ,但不必

random_shuffle有两种形式:

  • 一个接受 2 个参数(开始/结束迭代器)

  • 一个需要 3 个(开始/结束迭代器和一个随机生成器)。

您已经证明您知道如何使用第一种形式,但第一种形式的问题在于它在不同平台和不同编译器上的实现方式不同。它可能不会使用 rand()根本就是srand的功能种子。

您应该使用 3 参数形式并提供随机数生成器作为函数的参数。

可以关注this detailed answer了解如何制作您自己的随机数生成器,或者您可以提供 rand()random_shuffle作为随机数生成器。

关于c++ - random_shuffle 和 srand() 每次都给我相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36725218/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com