我正在嘗試爲一副紙牌實現一個類。 「甲板」功能之一就是洗牌。執行洗牌的邏輯
void deck::shuffle()
{
int cardsleft = deck::cards;
for(int i = 0; i < cardsleft ; i++)
{
srand(time(NULL));
int rdmn = rand() % cardsleft;
card tempcard = deck::dcards[rdmn];
deck::dcards[rdmn] = deck::dcards[i];
deck::dcards[i] = tempcard;
}
}
僅僅是明確的,甲板::卡是一個整數計數沒有。在這套牌中留下的牌,牌組::卡德是這套牌中的牌陣列。
我的問題是:這並沒有給出很好的結果。難道我需要通過指針來傳遞參考嗎?如果是這樣,它是如何完成的?
或者,它可能只是壞算法?也許我只需要一個更好的洗牌邏輯。請說。注意:是的,我知道「algorithm.h」庫中有一個std :: shuffle std :: random_shuffle函數,但這些函數僅適用於向量,而不是數組,因爲我在這裏使用,不是?
UPDATE:NVM,我才意識到我的問題都可以在這裏回答: http://blog.codinghorror.com/the-danger-of-naivete/
所以這是一個邏輯的缺陷,不是我的實現。
'std :: random_shuffle'和'std :: shuffle'使用任意隨機存取範圍。一個數組是一個隨機訪問範圍。 –