2010-12-09 8 views
1

Im très confus au sujet de faire un vecteur pour tenir des classes. si je voulais contenir un tas de données dans un seul vecteur comme l'exemple ci-dessous. puis avoir les données écrites dans une fonction membre de classe, et capable d'être appelé et utilisé par d'autres fonctions. Où dois-je coller la déclaration de vecteur? aidez s'il vous plaît!Je veux créer un vecteur pour contenir des classes

#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); 
} 
+0

Il y a beaucoup d'exemples autour, par exemple http://www.yolinux.com/TUTORIALS/LinuxTutorialC++STL.html –

+0

@Nikolai N Fetissov im en utilisant Visio express C++, et je ne veux pas jouer avec linux, surtout depuis que je suis déjà confus, merci! – TimothyTech

+1

La programmation est en réalité infiniment plus facile et moins compliquée sous linux – Falmarri

Répondre

7

Il me semble que vous étirer les limites de ce qu'un objet Card devrait faire. Puis-je suggérer la disposition suivante? Définit d'abord une carte simple.

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

    private: 
    int suit, rank; 
}; 

Ensuite, définir un objet qui est titulaire d'un vector de cartes et les manipule. Appelons-le Deck

class Deck { 
    public: 
    Deck(); 

    private: 
    vector <Card> cards; 
}; 

Maintenant, dans votre Deck classe, vous pouvez initialiser la collection de cartes comme bon vous semble.

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

excellent, merci. exactement ce que je cherchais – TimothyTech

1

Il existe deux options simples ici. Plus près de ce que vous avez écrit, utilisez une déclaration extern dans le fichier d'en-tête:

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

// something.cpp 
vector<Card> cards; 

Ou s'il est logique pour ce vecteur à « appartenir » à class Card (mais il n'y a toujours qu'un seul d'entre eux), vous pouvez faire un membre static:

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

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

Le membre static peut être public ou private comme tout autre membre. Si c'est public, tout code qui n'est pas dans une méthode Card qui utilise cards devra l'appeler Card::cards.

Quoi qu'il en soit, vous devez savoir comment initialiser avec le contenu que vous voulez ....

+0

Il faut être conscient de ce que le vecteur pourrait faire avec les éléments qu'il contient - en particulier la copie. –

Questions connexes