C++ Array Shuffle

Eve*_*ett 1 c++ arrays pointers

我对C++很新,并且不太了解带有指针和引用的函数参数.我有一系列卡片,我想使用Fisher-Yates shuffle进行洗牌.甲板被宣布为

Card *deck[deckSize];
Run Code Online (Sandbox Code Playgroud)

其中deckSize已声明为24.然后初始化该数组.然后我调用shuffle函数:

void shuffle (Card * deck[]) {
    int deckSize = 24;
    while (deckSize > 1) {
       long int k = lrand48();
       k = k %24;
       deckSize--;
       Card * temp = deck[deckSize];
       deck[deckSize] = deck[k];
       deck[k] = temp;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我在调用shuffle函数后尝试打印卡的值,则会出现seg错误.有关如何正确执行此操作的任何指示?

use*_*255 14

只需使用std::random_shuffle找到的内容<algorithm>,如下所示:

std::random_shuffle(deck, deck + deckSize);
Run Code Online (Sandbox Code Playgroud)

和你的牌组一起洗牌.


n8w*_*wrl 6

我的C/C++生锈了,但我认为你的声明:

Card *deck[deckSize];
Run Code Online (Sandbox Code Playgroud)

正在向卡片声明一系列指针.你不想要这个吗?

Card deck[deckSize];
Run Code Online (Sandbox Code Playgroud)

然后声明shuffle:

void shuffle (Card deck[]) 
Run Code Online (Sandbox Code Playgroud)

请记住,数组是0索引的.不确定你是否曾经访问过第24个元素,但那将是一个嘘声.

  • 洗牌指针可能就是你想要做的.如果卡对象很大,或者具有复杂的复制构造函数,那么复制可能非常昂贵. (2认同)