簡體   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