manipolazione di vettori creati con nuovi
Domanda
Qualcuno può aiutare con questo ...
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]);
}
Ricevo: errore C2228: a sinistra di '.reserve' deve essere class / struct / union
Sto creando un vettore usando il nuovo operatore in modo che sopravviva alla funzione in cui è stato creato. Questo quindi mi restituisce un puntatore a quel vettore sull'heap piuttosto che un vero oggetto vettoriale stesso. pertanto non mi consente di eseguire alcun .reserve () di push_backs. Non riesco a vedere un modo per aggirarlo, qualcuno può aiutare?
Soluzione
vVec è un puntatore a un vettore. Pertanto dovresti usare l'operatore indirection (- >) anziché il punto (.)
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]);
}
Altri suggerimenti
Utilizza " - > " invece di ". " vVec
è di tipo puntatore, quindi devi usare l'operatore - >
per accedere ai membri dell'oggetto a cui punta.
Invece di vuoi:
vVec.reserve(frankReservedSpace);
Personalmente, non mi interessa la notazione ungherese che hai inserito nel nome della tua variabile. Preferirei vedere qualcosa di più specifico del dominio e autodocumentare di "vVec". Se decidessi di passare a un elenco collegato, il nome della variabile dovrebbe cambiare per riflettere quello? Ovviamente la risposta è no.