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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top