【发布时间】:2021-08-02 10:07:12
【问题描述】:
我对编码(C++ 的第二学期)比较陌生,并且正在从事一个需要对字符串数组进行洗牌的项目。我过去使用 random_shuffle() 做了一个类似的程序,但发现它已经被弃用了。还有其他方法可以洗牌吗?
我正在使用 Xcode BTW,以防需要说明。
非常感谢任何帮助!这是我的第一篇文章,我敢肯定。
【问题讨论】:
-
使用 std::shuffle()
我对编码(C++ 的第二学期)比较陌生,并且正在从事一个需要对字符串数组进行洗牌的项目。我过去使用 random_shuffle() 做了一个类似的程序,但发现它已经被弃用了。还有其他方法可以洗牌吗?
我正在使用 Xcode BTW,以防需要说明。
非常感谢任何帮助!这是我的第一篇文章,我敢肯定。
【问题讨论】:
std::random_shuffle 已被弃用,因为它使用了默认的伪随机生成器,因为它很糟糕。现在,std::shuffle 让您可以使用 c++11 令人敬畏的新随机设备机制。您可以在重载中看到:
template< class RandomIt, class URBG >
void shuffle( RandomIt first, RandomIt last, URBG&& g );
URGB 是您希望它使用的随机发生器。所以现在你可以这样称呼它:
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(std::begin(my_array), std::end(my_array), g);
而且它会比以往更快、更随机。
【讨论】: