C 数组索引

C++ Array Index

本文关键字:索引 数组      更新时间:2023-10-16

我正在尝试在C 中制作一个黑色插孔,但是限制之一是卡片的数组必须同时包含卡的西装和价值,即2H,3H,2C,3C等。我该怎么做?

Suits

创建enum
enum Suits { Spades, Clubs, Diamonds, Hearts };

Card

创建class
class Card
{
  private:
    Suits suit;
    int value;
  public:
    Card(Suits s, int v);
};
Card::Card(Suits s, int v)
{
    suit = s;
    value = v;
}

main

中创建您的数组(或vector
int main(int argc, char const *argv[])
{
    int size = 6, total_colors = 4, total_values = 13;
    std::vector<Card> v;
    // Fill the vector with random cards
    for (int i = 0; i < size; i++)
        v.push_back(Card((Suits)(i % total_colors), i % total_values));
    return 0;
}

注释

  • 这将使您仅使用一个索引来操纵卡。比为每个属性创建单独的数组 Card可能具有更干净,更可维护的。
  • Card((Suits)(i % total_colors), i % total_values)将基于 index i创建Card,您可能需要更改逻辑,因此它适合您的用例。

,所以这类似于您表示矩阵的方式,除了每行都代表西装。

如果我在每一行中都有ACE->王,则行的长度为13。那么您可以将每个西装分配给特定行。例如,心脏可能是0,钻石1,黑桃2和俱乐部3。

为了索引这些值中的任何一个,假设您命名了数组卡,则仅是卡片[西装 * 13 card]。因此,例如,如果我想要2颗钻石的2个,则将其索引为卡片[1 * 13 1],因为2是Row Diamond的第二张卡片(假设ACE为索引0)。<<<<<<<<<<<</p>

您甚至可以为西服做一个枚举,以便计算看起来像卡片[钻石 * 13 1]。此外,您可以将另一个枚举用于卡片,以进一步简化卡片的索引[钻石 * 13 两个]。