繁体   English   中英

洗牌功能无法正常工作

[英]Shuffling function not working properly

我创建了一个使用 5X5 数组和向量的改组程序。 向量应该存储 1 到 25 的值,并且数组的每个元素应该只有 0。 一旦 shuffle() 函数被传递,它应该在数组中随机定位向量的 1 到 25 个值。

void Match::shuffle() {

    std::vector<int> vec(25);

    int randNum = rand() % (vec.size());

    for (int i = 1; i < 26; i ++) {
            vec.push_back(i);
    }
    for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
            backArr[i][j] = vec.at(randNum);
            vec.erase(vec.begin() + randNum);

            randNum = rand()%vec.size();
            }
    }

}

在最后一次运行中(即,在设置backArr[i][j]之后)您从向量中删除最后一个元素并计算randNum = rand()%vec.size(); 计算rand() % 0会失败。

只需在backArr[i][j] = vec.at(randNum);之前计算randNum backArr[i][j] = vec.at(randNum); (也删除循环前面的randNum )。

附录:正如@infixed 在评论中指出的那样,您还创建了一个包含 25 个(默认初始化)元素的向量,然后再推送 25 个附加元素(因此,我的答案的第一部分实际上不正确)。 要解决这个问题,您需要在声明vec时删除(25)或用相应的向量访问替换push_back指令(注意 off-by-1)。

为什么不使用 std::random_shuffle ?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM