【问题标题】:Rearranging objects in array in C++在 C++ 中重新排列数组中的对象
【发布时间】:2015-07-12 20:11:41
【问题描述】:

我正在为纸牌游戏制作洗牌功能。我创建了一组 Card 对象。然后我尝试使用 random_shuffle 重新排列数组中的对象。但它不起作用。

char faces[13] = { '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A' };
char suits[4] = { char(3), char(4), char(5), char(6) };
int values[13] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 11 };

Card** deck = new Card*[52];

for (int row = 0; row <= 3; row++)
{
    for (int column = 0; column <= 12; column++)
    {
        deck[Card::getCounter()] = new Card(suits[row], faces[column], values[column], true);
    }
}
int size = sizeof(deck) / sizeof(deck[0]);
random_shuffle(*deck, *deck + size);

我的意思是,如果我与 cout 核对,比如

 cout << deck[0]->getFace()<< deck[0]->getSuit() << endl;

它显示 2(心脏),就像使用 random_shuffle 之前一样

【问题讨论】:

标签: c++ arrays random


【解决方案1】:

您的代码的问题是运算符大小返回指针的大小(在 64 位机器上为 8),而不是它指向的数组的大小。因此,表达式

  sizeof(deck) / sizeof(deck[0])

返回 1,你只打乱一个值,这意味着你不打乱。 解决方案可以是:

  1. 使用数组的显式大小 random_shuffle(*deck, *deck + 52);
  2. 更好,定义

    const int NUM_OF_CARD_IN_DECK= 52

在任何你需要的地方使用它

  1. 更好的是,使用 std::vector

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-15
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多