我想创建一个Vector来保存类

时间:2010-12-09 00:01:18

标签: c++ class vector

我非常困惑于制作一个矢量来保持类。 如果我想在单个向量中保存一堆数据,如下例所示。然后将数据写入类成员函数中,并且能够被其他函数调用并使用。

我在哪里坚持矢量声明? 请帮忙!

#include <vector>

class Card
{
   public:
    int suit;
    int rank;
    Card::Card(int suit, int rank);
    Function();
};

 vector<Card> cards;

int main()
{
}
Card::Function()
 {
    for loop...
     Card cardz(i, i);
    cards.push_back(cardz);
} 

2 个答案:

答案 0 :(得分:7)

在我看来,你正在扩展Card对象应该做的界限。我可以建议以下布局吗?首先定义卡。

class Card {
  public:
    Card(int s, int r)
    : suit(s), rank(r)  {
      // Initialize anything else here
    }

  private:
    int suit, rank;
};

接下来,定义一个包含vector张卡并操纵它们的对象。我们称之为Deck

class Deck {
  public:
    Deck();

  private:
    vector <Card> cards;
};

现在,在您的Deck课程中,您可以根据需要初始化卡片组。

Deck::Deck() {
  for (int suit = 0; suit < 4; suit++) {
    for (int rank = 0; rank < 13; rank++) {
      cards.push_back(Card(suit, rank));
    }
  }
}

答案 1 :(得分:1)

这里有两个简单的选项。更接近您所写的内容,在头文件中使用extern声明:

// something.h
extern vector<Card> cards;

// something.cpp
vector<Card> cards;

或者,如果此向量“属于”class Card(但仍然只有其中一个),则可以使其成为static成员:

// Card.h
class Card {
  // ...
  static void init_cards();
  static vector<Card> cards;
};

// Card.cpp
vector<Card> Card::cards;

static成员可以像任何其他成员一样publicprivate。如果是public,那么使用Card的{​​{1}}方法中的任何代码都必须将其称为cards

无论哪种方式,你必须弄清楚如何用你想要的内容初始化它....