我有一個Deck對象(卡片組),它是一個實現爲雙向鏈表的雙端隊列。我希望能夠隨意排列隊列,但我想要去解決它的方式超出了我的想象。相反,我選擇了預先洗牌陣列來指向牌,並在事實之後排隊。問題是,我現在的代碼似乎沒有初始化指針。初始化指針數組
void BuildDeck(Deck* deck) {
Card** cards = new Card*[20];
const size_t MAX_INTEGER_LENGTH = sizeof(int) * 4;
char szPostfix[] = "_Card.bmp";
for(int i = 1; i < 21; i++) {
char path[MAX_INTEGER_LENGTH + sizeof(szPostfix) + 1];
sprintf(path,"%d%s",i, szPostfix);
cards[i-1] = new Card(i,path);
}
ShuffleArray(cards);
for (int i = 0; i < 20; i++) {
deck->PushTop(cards[i]);
}
}
void Swap(Card* a, Card* b) {
Card temp = *a;
*a = *b;
*b = temp;
}
void ShuffleArray(Card** cardArray) {
srand(dbTimer());
for (int i = 0; i < 20; i++)
Swap(cardArray[i],cardArray[rand()%20]);
}
我想在那裏我搞砸了是在card[i] = new Card(...)
線,但它在某種程度上權在我看來。
任何建議,將不勝感激。
免責聲明:我知道我應該使用大部分這些東西的標準庫,但我試圖先教自己最難的東西。這只是我學習的方式。
編輯:我修正了索引問題。現在我只是要弄清楚爲什麼一些圖像現在沒有繪製...:/感謝您的幫助!
對於固定大小的數組,您必須使用自動對象(即'Card card [10] [20];')。只有當你真的需要動態分配時才應該使用'new'。 – iammilind
你的'swap'例程會更好,因爲'void swap(Card *&a,Card *&b){Card * tmp = a; a = b; b = tmp; }'以節省大量不必要的數據複製。 –
交換更正修復它!謝謝! –