洗牌功能无法正常工作

时间:2016-09-27 16:44:27

标签: c++ arrays vector

我创建了一个使用5X5数组和向量的混洗程序。向量应存储值1到25(包括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();
            }
    }

}

2 个答案:

答案 0 :(得分:0)

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

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

附录:正如@infixed在评论中指出的那样,你还创建了一个25(默认初始化)元素的向量,然后推送了25个额外的元素(由于这个,第一部分,我的回答其实并非如此)。 要解决这个问题,您需要在声明(25)时删除vec,或者通过相应的向量访问替换push_back指令(请注意1之后)。

答案 1 :(得分:0)

为什么不使用std :: random_shuffle?