【问题标题】:Is there a built-in function that will shuffle an array? [duplicate]是否有一个内置函数可以对数组进行洗牌? [复制]
【发布时间】:2021-12-31 14:03:07
【问题描述】:

我正在尝试用 C++ 创建一副牌。我将该牌组存储在数组array<Card, 52> deckOfCards = generateCards() 中。一旦我创建了数组,有什么方法可以轻松地打乱其中的对象吗?例如,在 Java 中,您可以使用 shuffle() 算法,对象将被打乱。


人们在评论中提到了random_shuffle 的用法,但是random_shuffle 自 C++14 起已被弃用,自 C++17 起已被删除。

【问题讨论】:

  • @WaisKamal 在这一点上我建议推荐shuffle,而不是random_shuffle。正如您在链接的文档中看到的那样,random_shuffle 已被弃用并删除。
  • 你是如何实现的,能否提供一个例子,因为当我添加#include <algorithm>并尝试调用random_shuffle(deckOfCards)时,我在clion中得到了No matching function for call to 'random_shuffle红线
  • @HadiB 您是否阅读了链接文档和下面的示例?

标签: c++ arrays c++17 c++20 shuffle


【解决方案1】:

是的,C++ 确实有一个shuffle() 函数。但是,您还必须在其中手动添加一个随机生成器,乍一看可能会令人生畏。但是,如果您并不真正关心正在使用的确切生成器和引擎,那么可以简单地通过以下方式完成:

std::shuffle(deckOfCards.begin(), deckOfCards.end(), std::default_random_engine{/*optional seed*/});

std::shuffle(deckOfCards.begin(), deckOfCards.end(), std::random_device{});

第一个是确定性的,第二个是非确定性的。

【讨论】:

  • 非常感谢!
猜你喜欢
  • 2023-01-15
  • 2017-02-09
  • 2013-08-30
  • 2021-08-02
  • 1970-01-01
  • 2018-01-07
  • 2016-10-06
  • 2021-07-11
  • 2020-11-03
相关资源
最近更新 更多