我有一个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; }'以节省大量不必要的数据复制。 –
交换更正修复它!谢谢! –