C++ 卡的指针组取代功能C++;
我要做的是: 将函数replace添加到通过值作为参数传递给卡片的deck类中。这个 卡片放在卡片组的底部 CardPtr是一个私有类变量,它被设置为构造函数中卡片组的顶部卡片C++ 卡的指针组取代功能C++;,c++,pointers,replace,linked-list,singly-linked-list,C++,Pointers,Replace,Linked List,Singly Linked List,我要做的是: 将函数replace添加到通过值作为参数传递给卡片的deck类中。这个 卡片放在卡片组的底部 CardPtr是一个私有类变量,它被设置为构造函数中卡片组的顶部卡片 node<card> *newCard; //card pointer newCard = new node<card>(card(2, 0), NULL); //points to the first card CardPtr = newCard; //sets cardpointer to
node<card> *newCard; //card pointer
newCard = new node<card>(card(2, 0), NULL); //points to the first card
CardPtr = newCard; //sets cardpointer to newcard
节点*newCard//卡片指针
newCard=新节点(card(2,0),空)//指向第一张牌
CardPtr=新卡//将cardpointer设置为newcard
一个单独的类取下最上面的卡片并显示值,在这个过程中从卡片组中删除该节点。我正试着把那张卡片放回底部。那么这就是代码:
`void deck::replace(card BottomCard)
{
int count = 0;
node<card> *replaceptr;
bottom = NULL;
replaceptr = new node<card>(BottomCard, NULL);
if (bottom != NULL)
{
bottom->next = replaceptr;
}
else
{
bottom = replaceptr;
}
if (count >= 52)
{
throw overflowError("ERROR: Deck is already full");
}
//CardPtr = new node<card>(BottomCard, NULL);
//bottom->next = CardPtr;
}
`void-deck::replace(卡片底部的卡片)
{
整数计数=0;
节点*replaceptr;
底部=空;
replaceptr=新节点(BottomCard,空);
如果(底部!=NULL)
{
底部->下一步=replaceptr;
}
其他的
{
底部=更换件;
}
如果(计数>=52)
{
抛出溢出错误(“错误:甲板已满”);
}
//CardPtr=新节点(底部卡片,空);
//底部->下一步=CardPtr;
}
我在我的主代码中实现了它,它似乎取代了卡组顶部的卡。有人能帮我吗?多谢各位
以下是我的完整构造函数:
deck::deck() // deck constructor
{
node<card> *newCard; //card pointer
newCard = new node<card>(card(2, 0), NULL); //points to the first card
CardPtr = newCard; //sets cardpointer to newcard
for (int i = 0; i < 4; i++)
{
for (int j = 2; j < 15; j++)
{
if (i == 0 && j == 2) continue;
node<card> *temp = new node<card>(card(j, i), NULL); // temporary pointer sets card value and suit to numbers for value and suit
newCard->next = temp;// sets newcard pointer .next to temp
newCard = temp;// sets newcard to temp
}
}
}
deck::deck()//deck构造函数
{
node*newCard;//卡指针
newCard=new节点(card(2,0),NULL);//指向第一张卡
CardPtr=newCard;//将cardpointer设置为newCard
对于(int i=0;i<4;i++)
{
对于(int j=2;j<15;j++)
{
如果(i==0&&j==2)继续;
node*temp=new node(card(j,i),NULL);//临时指针将卡片值和套装设置为数值和套装的数字
newCard->next=temp;//设置newCard指针。在temp旁边
newCard=temp;//将newCard设置为temp
}
}
}
您需要确定列表中倒数第二个节点(位于底部卡之前的卡),因为该节点的下一个
指针需要指向新的底部卡
然后,只需将倒数第二个节点的next
条目更改为新节点
(请确保在插入新的底部卡节点后删除旧的底部卡节点,否则可能导致内存泄漏)
编辑
如果使用循环列表,则可以省去扫描列表中最后一个节点的工作量。您可以存储指向最后一个节点的指针,其next
指针(而不是null)将引用第一个节点。您需要确定列表中倒数第二个节点(底部卡之前的卡),因为该节点的next
指针将需要引用新的底部卡
然后,只需将倒数第二个节点的next
条目更改为新节点
(请确保在插入新的底部卡节点后删除旧的底部卡节点,否则可能导致内存泄漏)
编辑
如果使用循环列表,则可以省去扫描列表中最后一个节点的工作量。您可以存储指向最后一个节点的指针,其next
指针(而不是null)将引用第一个节点。您需要确定列表中倒数第二个节点(底部卡之前的卡),因为该节点的next
指针将需要引用新的底部卡
然后,只需将倒数第二个节点的next
条目更改为新节点
(请确保在插入新的底部卡节点后删除旧的底部卡节点,否则可能导致内存泄漏)
编辑
如果使用循环列表,则可以省去扫描列表中最后一个节点的工作量。您可以存储指向最后一个节点的指针,其next
指针(而不是null)将引用第一个节点。您需要确定列表中倒数第二个节点(底部卡之前的卡),因为该节点的next
指针将需要引用新的底部卡
然后,只需将倒数第二个节点的next
条目更改为新节点
(请确保在插入新的底部卡节点后删除旧的底部卡节点,否则可能导致内存泄漏)
编辑
如果使用循环列表,则可以省去扫描列表中最后一个节点的工作量。您可以存储指向最后一个节点的指针,其
下一个指针(而不是null)将指向第一个节点。如果CardPtr
负责始终指向顶部卡片(链接列表的开头),然后应更改此方法的代码,使其不会修改CardPtr
。也许可以声明另一个局部变量,将其初始化为等于CardPtr
,然后在循环中重复修改该指针(以便CardPtr
永不更改)
也可能是您的另一种从牌组顶部发牌的方法没有使CardPtr
处于良好状态(指向新的顶部牌),这意味着您有多个问题需要解决。如果CardPtr
负责始终指向顶部牌(链接列表的开头),然后应更改此方法的代码,使其不会修改CardPtr
。也许可以声明另一个局部变量,将其初始化为等于CardPtr
,然后在循环中重复修改该指针(以便CardPtr
永不更改)
也有可能是您的另一种从牌组顶部发牌的方法没有使CardPtr
处于良好状态(指向新的顶部牌),这意味着您得到了
bottom = new node <card>;
while (CardPtr != NULL)
{
if (CardPtr->next == NULL)
{
bottom = CardPtr;
}
}
CardPtr = new node<card>(BottomCard, NULL);
if ( bottom != NULL )
{
bottom->next = CardPtr;
}
else
{
bottom = CardPtr;
}