manipulation de vecteurs créés avec de nouveaux
Question
Quelqu'un peut-il nous aider avec ceci ...
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: la partie gauche de '.reserve' doit avoir la classe / struct / union
Je crée un vecteur à l'aide de l'opérateur new afin qu'il survit à la fonction où il a été créé. Cela me renvoie donc un pointeur sur ce vecteur sur le tas plutôt que sur un objet vectoriel lui-même. donc cela ne me laissera pas effectuer de .reserve () de push_backs. Je ne vois pas comment contourner le problème. Quelqu'un peut-il aider?
La solution
vVec est un pointeur sur un vecteur. Par conséquent, vous devriez utiliser l'opérateur indirection (- >) 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]);
}
Autres conseils
Utilisez " - > " au lieu de ". " vVec
est du type pointeur. Vous devez donc utiliser opérateur - >
pour accéder aux membres de l'objet vers lequel il pointe.
Au lieu de vous souhaitez:
vVec.reserve(frankReservedSpace);
Personnellement, je n’aime pas la notation hongroise que vous avez intégrée dans votre nom de variable. Je préférerais voir quelque chose de plus spécifique à un domaine et auto-documenté que «vVec». Si vous décidez de passer à une liste chaînée, le nom de la variable devra-t-il changer pour refléter cela? Évidemment, la réponse est non.