用另一个阵列将阵列改组

Shuffling an Array with another array

本文关键字:阵列 另一个      更新时间:2023-10-16

我正在尝试混合数组顺序,而不会丢失任何内容。这是我想将其混合的卡片。

我有多个我用来通信的文件,这是问题所在的地方:

class Deck{
    private:
         PlayingCard deck[52];
    public:
         Deck();
         void shuffle();
         double draw(); 
         void printDeck();
};

因此,我创建了一个甲板的实例,我能够正确打印整个甲板,我只想将其混合:

void Deck::shuffle(){
    int randNum;
    string tmp;
    srand(time(NULL));
    for(int i = 0; i < 52; i++){
        randNum = rand()%52;
        deck[i] = deck[randNum];
    }   
}

所以我知道我正在分配一个随机数,没有什么可以阻止它两次获得相同的随机数。我不确定是否有另一种方法可以在不拿两次的情况下调用随机号码,或者我应该致电另一种方法。因为我的使用方式将卡片混合在一起,但不能两次打印相同的卡片。

    deck[i] = deck[randNum];

这将产生不正确的行为,因为您正在制作第二副副本[randnum](只要randnum!= i)

如果要交换两个数字,则可以做

PlayingCard tmp = deck[i];
deck[i] = deck[randNum];
deck[randNum] = tmp;

std::swap(deck[i], deck[randNum);

或正如Igor Tandetnik指出的那样,您可以使用std :: Shuffle代替整个环。