我试图改变字符串数组,并在尝试了random_shuffle之后获得了相同的数组,如下所示。
std::string arr[5] = {"a","b","c","d","e"};
random_shuffle(std::begin(arr), std::end(arr));
当我打印出来时,洗牌数组在我的程序的多次执行中的顺序相同。
答案 0 :(得分:3)
您可能忘了播种随机生成器。这应该被称为至少一次,最好是一次。最好是在课程开始时。
std::srand(std::time(0));
答案 1 :(得分:1)
在std::random_shuffle中,随机数生成器是实现定义的,但经常使用函数std::rand
。
除非您使用std::srand
为RNG播种,否则每次运行该程序时都会获得相同的随机播放顺序。
根据this answer中kake_fisk的建议,一种可能的解决方法是将std::srand
与std::time
一起使用。