Random_shuffle不允许我将其传递给种子
random_shuffle not allowing me to pass it a seed
所以我有一个卡片矢量,并且我试图使用Random_shuffle方法将其调整,但是它并没有仅通过将其传递给第一个和最后一个项目来将其改组。所以我知道有第三个参数是自定义种子,它是随机_shuffle说的,它找不到与这些参数(或类似的东西 - 我的程序中的西班牙语中的东西)的任何功能
>基本上,我有两个矢量,敌人和playercards,大小为5。
random_shuffle(enemyCards.begin(), enemyCards.end());
random_shuffle(playerCards.begin(), playerCards.end());
此编译但不起作用,而
int myrandom (int i) { return std::rand()%i;}
random_shuffle(enemyCards.begin(), enemyCards.end(), myrandom);
random_shuffle(playerCards.begin(), playerCards.end(), myrandom);
甚至没有编译。
我做错了吗?
我在代码中有一个srand()和其他工作rand(),所以应该正常工作,只是随机_shuffle。
这是编译器使用Myrandom方法时所说的:
Error 11 error C3867: 'comgrid::Game::myrandom': function call missing argument list; use '&comgrid::Game::myrandom' to create a pointer to member
Error 12 error C2780: 'void _STL::random_shuffle(_RandomAccessIter,_RandomAccessIter)' : expects 2 arguments - 3 provided
这很奇怪,因为它实际上是1:1作为cplusplus上的示例。
使 myrandom
成为 Game
类的静态成员函数。
一个人不会将种子传递给 random_shuffle
:可选的第三个参数是一个函数对象,当传递 n
作为参数时,必须在[0,n)中返回一个随机整数。以下SSCCE演示了您的5个元素向量的random_shuffle
(和"更好" C 11变体shuffle
)(Coliru的实时代码):
void dump_one(const char* name, vector<int> const& v) {
cout << name << ": {" << v[0];
for (auto i = size_t{1}; i < v.size(); ++i) {
cout << ',' << v[i];
}
cout << "}n";
}
int myrandom(int i) { return rand() % i; }
int main() {
srand(random_device{}());
auto playerCards = vector<int>{1,2,3,4,5};
auto enemyCards = vector<int>{6,7,8,9,10};
// Variant 1: use std::rand
random_shuffle(begin(playerCards), end(playerCards));
random_shuffle(begin(enemyCards), end(enemyCards));
dump_one("player", playerCards);
dump_one("enemy", enemyCards);
// Variant 2: use functor
random_shuffle(begin(playerCards), end(playerCards), myrandom);
random_shuffle(begin(enemyCards), end(enemyCards), myrandom);
dump_one("player", playerCards);
dump_one("enemy", enemyCards);
// C++11: Use shuffle instead of random_shuffle
auto engine = mt19937_64{random_device{}()};
shuffle(begin(playerCards), end(playerCards), engine);
shuffle(begin(enemyCards), end(enemyCards), engine);
dump_one("player", playerCards);
dump_one("enemy", enemyCards);
}
您所说的"不工作"的技术正常工作,因此您的程序的问题不在您对我们描述的内容中。
相关文章:
- 如何使用要传递给 mt19937 的可选随机种子参数设计函数
- 从给定种子生成相同的随机数序列C++
- 如何使用可选的随机种子参数创建 roll_die() 函数
- 是否可以为boost::random::uniform_int_distribution<>设置确定性种子?
- 使用给定种子生成的随机数序列是否保证在标准版本中相同?
- 在编译时生成某种子类/类型注册表?
- libtorrent是否支持带摘要身份验证的http web种子
- 我应该使用std::seed_seq来种子std::mt19937吗
- 除了 rand() 之外,是否有任何随机生成器库,开发人员可以手动设置种子?
- 随机数生成器的种子和状态有什么区别?
- 为什么 std::shuffle 采用右值引用?
- 如果我在每个平台上使用相同的种子,随机结果会相同吗?
- C++多个实例的随机数生成器组种子中增强
- 从多个线程调用 std::shuffle
- C++11 中的随机数:有没有一种简单的方法可以将生成器种子放在代码的一个位置,然后在不同的函数中使用它?
- PRNG种子到底是什么,它在c ++中是如何工作的?
- CUDA Shuffle指导减少速度慢于减少共享记忆
- 如何改变高斯分布(提升)中的种子
- 梅森捻捻机在C++11中的最佳常数种子
- ' std::shuffle '是否保证在不同向量上具有相同种子的相同顺序?