交换算法为所有内容提供相同的值

Tem*_*ish 2 c++ swap pointers

我的课程中有一个任务是编写一个程序,创建52个卡片对象,每个卡片都有一个值和一个套装.在我们创建一个对象数组后,我们必须随机切换两张卡的位置.问题是,当我去交换我的卡时,它们都变成了相同的.这是导致问题的代码:

void SwapCards(Card* cardOne, Card* cardTwo) {
    //swap cards here
    Card *temp = cardOne;
    *cardOne = *cardTwo;
    *cardTwo = *temp;
    //once it gets here all three variables end up with the same object?
}
Run Code Online (Sandbox Code Playgroud)

现在这里是调用此函数的for循环:

for (int i = 0; i < 104; i++) { 
    //get two random values and send them to SwapCards to switch both objects
    int c_one = RandomRange(0, 51);
    int c_two = RandomRange(0, 51);
    SwapCards(deck[c_one], deck[c_two]);
}
Run Code Online (Sandbox Code Playgroud)

任何有关这方面的帮助将不胜感激.我花了很多时间试图解决这个问题,但这让我很困惑.

πάν*_*ῥεῖ 5

"问题是,当我换掉我的牌时,他们两个都变成了相同的牌."

你失去了cardOne这里的当前价值:

*cardOne = *cardTwo;
Run Code Online (Sandbox Code Playgroud)

由于temp仍然指向相同的地址cardOne,因此cardOne原始值未保存.

更改您的代码如下,以保存cardOne值:

Card temp = *cardOne;
*cardOne = *cardTwo;
*cardTwo = temp;
Run Code Online (Sandbox Code Playgroud)

更好(也可能更清晰)的解决方案是使用引用而不是指针:

void SwapCards(Card& cardOne, Card& cardTwo) {
    //swap cards here
    Card temp = cardOne;
    cardOne = cardTwo;
    cardTwo = temp;
}
Run Code Online (Sandbox Code Playgroud)

并且作为旁注:这是std::swap()已经做过的,不需要在这里推出自己的实现.