2009-07-16 9 views
2

J'essaye de créer un vecteur qui contient des pointeurs, chaque pointeur pointe vers un autre vecteur d'un type Cell que j'ai fait en utilisant une struct. La boucle for ci-dessous me permet de laisser l'utilisateur définir combien d'éléments il y a dans le vecteur de pointeurs. Voici mon code:créer un vecteur de pointeurs qui pointent vers d'autres vecteurs

vector< vector<Cell>* > vEstore(selection); 
for (int t=0; t<selection; t++) 
{ 
    vEstore[t] = new vector<Cell>; 
    vEstore[t]->reserve(1000); 
} 

, je pense, me donne un vecteur de pointeurs vers des vecteurs de destination du type Cell. Cela compile mais j'essaie maintenant de push_back sur les vecteurs de destination et ne peux pas voir comment le faire.

Puisque le vecteur de destination est la cellule de type qui est fabriqué à partir d'un type comme suit:

struct Cell 
{ 
    unsigned long long lr1; 
    unsigned int cw2; 
}; 

Je ne peux pas travailler comment push_back sur ce vecteur de destination avec 2 valeurs?

Je pensais ...

binpocket[1]->lr1.push_back(10); 
binpocket[1]->cw2.push_back(12); 

Comme je pensais que ce serait déréférencer le pointeur à binpocket[1] révélant les valeurs du tableau de destination, puis traiter chaque élément à son tour. Mais il ne compile pas.

Quelqu'un peut-il aider ... mais cela n'a qu'une seule valeur et ne compile pas quand même.

Répondre

7
Cell cell = { 10, 12 }; 
binpocket[1]->push_back(cell); 

Vous pouvez également donner un constructeur à votre structure.

struct Cell 
{ 
    Cell() {} 
    Cell(unsigned long long lr1, unsigned int cw2) 
     : lr1(lr1), cw2(cw2) 
    { 
    } 

    unsigned long long lr1; 
    unsigned int cw2; 
}; 

Ensuite, vous pouvez faire

binpocket[1]->push_back(Cell(10, 12)); 

Notez que long long est non standard (encore), mais est une extension généralement acceptée.

+0

Merci beaucoup à la fois – Columbo

+0

Ceci est probablement une question vraiment stupide, mais pourquoi avez-vous le constructeur deux fois, une fois vide? – Columbo

+0

Si vous ne fournissez aucun constructeur, le compilateur créera un constructeur par défaut vide (c'est-à-dire sans paramètre) pour vous. Cela signifie que vous pouvez faire 'Cell cell'. En fournissant un constructeur personnalisé, le compilateur ne créera pas le constructeur par défaut pour vous. C'est pourquoi je l'ai fourni. Vous n'avez pas à faire cela, si vous ne voulez pas faire 'Cell cell;'. – avakar

3

Donnez votre cellule un constructeur:

struct Cell 
{ 
    unsigned long long lr1; 
    unsigned int cw2; 

    Cell(long long lv, int iv) : lr1(lv), cw2(iv) {} 
}; 

Vous pouvez dire des choses comme:

binpocket[1]->push_back(Cell(10, 12)); 

BTW, notez que long long est pas standard C++.

Questions connexes