Tilgang vektorer av structs

stemmer
3

Jeg har en struct:

struct OutputStore 
{
    int myINT;
    string mySTRING;
}

Hvis jeg oppretter en matrise av type OutputStore som følger:

OutputStore *OutputFileData = new OutputStore[100];

så jeg kan ta det med:

OutputFileData[5].myINT = 27;

Men hvis jeg bruker en vektor i stedet for en matrise:

vector<OutputStore> *OutputFileData = new vector<OutputStore>(100);

Så får jeg en' ... er ikke et medlem av 'std :: vector <_Ty>' feil hvis jeg prøver:

OutputFileData[5].myINT = 27;

Siden du kan få tilgang til en vektor via det indeks akkurat som du kan en matrise, hvorfor denne linjen ikke fungerer. Jeg er bare interessert i å vite så det tyder på at jeg mangler noen grunnleggende bit av forståelse.

(Jeg endret til en vektor som jeg ønsket å push_back som jeg ikke vet størrelsen som mine data vil nå. Jeg har fått det til å fungere ved hjelp av en konstruktør for strukturen og skyve tilbake via det ... Jeg bare ønsker å forstå hva som skjer her)

Publisert på 22/07/2009 klokken 15:14
kilden bruker
På andre språk...                            


2 svar

stemmer
9

Ikke lag en peker til en vektor. Bare gjør

vector<OutputStore> OutputFileData(100);

Og du blir fin. For å gjøre koden over arbeidet du må gjøre følgende

(*OutputFileData)[5].myINT = 27;
Svarte 22/07/2009 kl. 15:16
kilden bruker

stemmer
3

Fordi når du bruker [] operatør på en peker, det vil indeksere inn som peker, ikke objektet. For å komme til objektet må du først deferanseoperasjon din vektor pekeren.

(*OutputFileData)[5].myINT = 27;
//*OutputFileData is the same as OutputFileData[0]

Hvis du ønsker å bruke [] operatøren direkte på vektoren ikke erklære det som en peker.

vector<OutputStore> OutputFileData(100);
OutputFileData[5].myINT = 27;

En vektor er bare en klasse som alle andre i C ++. Hvis du oppretter en peker til det, er du ikke jobber direkte med objektet før du dereference det.

Svarte 22/07/2009 kl. 15:16
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more