[英]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.