Random_shuffle不允许我将其传递给种子

random_shuffle not allowing me to pass it a seed

本文关键字:种子 shuffle 不允许 允许我 Random      更新时间:2023-10-16

所以我有一个卡片矢量,并且我试图使用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);
}

您所说的"不工作"的技术正常工作,因此您的程序的问题不在您对我们描述的内容中。