2009-06-23 13 views
1

Quelqu'un peut-il aider à cela ...manipulation des vecteurs créés avec de nouveaux

vector<unsigned int> *vVec = new vector<unsigned int>; 
     vVec .reserve(frankReservedSpace); 

     start = std::clock(); 
     for(int f=0; f<sizeOfvec; f++) 
     { //Populate the newly created vector on the heap 
      vVec .push_back(pArray[f]); 
     } 

Je reçois: erreur C2228: gauche '.reserve' doit avoir la classe/struct/union

Je crée un vecteur en utilisant le nouvel opérateur afin qu'il survive à la fonction où il est créé. Cela me renvoie donc un pointeur vers ce vecteur sur le tas plutôt qu'un objet vectoriel lui-même. par conséquent, il ne me laissera pas exécuter .reserve() de push_backs. Je ne peux pas voir un moyen de contourner cela, quelqu'un peut-il aider?

+0

Vous n'avez pas besoin de réserver de l'espace dans un vecteur car il sera redimensionné lorsque vous faites le push_back – Lodle

+0

Pas nécessaire, mais une bonne pratique si vous connaissez - au moins approximativement - le nombre d'éléments à l'avance car cela réduit le nombre de tampons réaffectations et copie associée. – sharptooth

+0

Si vous êtes inquiet au sujet des bonnes pratiques, n'allouez quand même pas de vecteurs ... –

Répondre

9

vVec est un pointeur vers un vecteur. Par conséquent, vous devez utiliser l'indirection (->) opérateur plutôt que le point

vector<unsigned int> *vVec = new vector<unsigned int>; 
vVec->reserve(frankReservedSpace); 

start = std::clock(); 
for(int f=0; f<sizeOfvec; f++) 
{ //Populate the newly created vector on the heap 
    vVec->push_back(pArray[f]); 
} 
1

Utilisez "->" au lieu de "." vVec est de type pointeur, vous devez donc utiliser operator -> pour accéder aux membres de l'objet vers lequel il pointe.

0

Insterad de

vVec.reserve(frankReservedSpace); 

vous voulez:

vVec->reserve(frankReservedSpace); 
0

Personnellement, je n »(.) t attention à la notation hongroise que vous avez construite dans votre nom de variable. Je préférerais voir quelque chose de plus spécifique au domaine et auto-documentant que 'vVec'. Si vous décidiez de passer à une liste chaînée, le nom de la variable devrait-il changer pour refléter cela? Évidemment, la réponse est non.