C ++ vektor av pekere eksempler

C ++ vektor av pekere eksempler
En vanlig vektor oppstått i C ++ programmering, er en vektor av objekter av samme type. Disse objektene kan være grunnleggende objekter eller objekter som er instantiert fra en klasse. Denne artikkelen illustrerer eksempler på vektor av pekere, til samme objekttype. For å bruke en C ++ vektor, må programmet inkludere vektorbiblioteket, med et direktiv.

All vektorkode for denne artikkelen er i hovedfunksjonen (), med mindre annet er angitt. Vektor av pekere til forskjellige typer, er imidlertid adressert på slutten av artikkelen. For å sette pris på vektor-av-poeng, er det godt å huske kunnskapen for vektor av objekter.

Artikkelinnhold

  • Husk for vektor-av-objekter
  • Vektor av pekere av samme type
  • Vektor av pekere til forskjellige typer
  • Konklusjon

Husk for vektor av objekter

Vektor av karaktereksempel
Følgende program, viser et eksempel på en vektor av chars:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

vektor vtr = 'u', 'v', 'w', 'x', 'y', 'z';
for (int i = 0; icout << vtr[i] << ";
cout << endl;
for (vektor :: iterator it = vtr.begynne(); den != VTR.slutt(); det ++)
cout << *it << ";
cout << endl;
return 0;

Utgangen er:

U v w x y z
U v w x y z

Den samme listen har blitt vist to ganger. Den første uttalelsen i hoved- () -funksjonen, oppretter en vektor av chars. De neste to kodesegmentene, skriv ut den samme vektorlisten på terminalen. Den første av disse kodesegmentene, bruker indekser. Den andre bruker iteratorer.

Vektor av heltalleksempel
Følgende program viser et eksempel på en vektor av INT:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

vektor vtr = 1, 2, 3, 4, 5, 6;
for (int i = 0; icout << vtr[i] << ";
cout << endl;
for (vektor :: iterator it = vtr.begynne(); den != VTR.slutt(); det ++)
cout << *it << ";
cout << endl;
return 0;

Utgangen er:

1 2 3 4 5 6
1 2 3 4 5 6

Den samme listen har blitt vist to ganger, på samme måte som i forrige kode.

Vektor av strengobjekteksempel
En const -peker til chars, peker på en streng bokstavelig. Et strengobjekt blir instantiert fra strengklassen. For å ha et strengobjekt, må strengbiblioteket inkluderes i et direktiv, øverst i programmet. Det er mulig og lett å ha en vektor av strengobjekter, som følgende program viser:

#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

vektor vtr = "en", "to", "tre", "fire", "fem";
for (int i = 0; icout << vtr[i] << ";
cout << endl;
for (vektor :: iterator it = vtr.begynne(); den != VTR.slutt(); det ++)
cout << *it << ";
cout << endl;
return 0;

Utgangen er:

en to tre fire fem
en to tre fire fem

Den samme listen har blitt vist to ganger, på samme måte som i forrige kode.

Vektor av instantiert objekteksempel
Programmereren kan lage sin egen klasse, instantisere gjenstander fra klassen og deretter sette objektene i en vektor. Følgende program illustrerer dette:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
Klasse thecla
offentlig:
const char* str;
Thecla (char chs [])
Str = CHS;

;
int main ()

char ch1 [] = "text1", ch2 [] = "text2", ch3 [] = "text3", ch4 [] = "text4", ch5 [] = "text5";
THECLA OBJ1 (CH1), OBJ2 (CH2), OBJ3 (CH3), OBJ4 (CH4), OBJ5 (CH5);
vektor vtr = obj1, obj2, obj3, obj4, obj5;
for (int i = 0; icout << vtr[i].str << ";
cout << endl;
for (vektor :: iterator it = vtr.begynne(); den != VTR.slutt(); det ++)
cout cout << endl;
return 0;

Utgangen er:

text1 text2 text3 text4 text5
text1 text2 text3 text4 text5

Den samme listen har blitt vist to ganger, på samme måte som i forrige kode.

Klassen har en konstruktør og ett offentlig datamedlem. Konstruktøren tildeler argumentet til dette datamedlemmet.

Verdiene til vektoren, denne gangen, er strenglitteraler, og ikke strengobjekter. Så legg merke til hvordan bokstaver og vektorelementer er blitt kodet.

Hvis et objekt som er instantiert fra klassen er OBJ, så vil verdien av medlemmet få tilgang til gjennom objektet, som:

obj.str

OBJ i dette tilfellet er en referanse. Legg merke til bruken av prikkoperatøren. Dette er grunnen til at i det siste-men-en-kodesegmentet, i Main () -funksjonen, har hver vektorverdi blitt åpnet som:

VTR [i].str

hvor [i] er indeksen.

Hvis en peker til OBJ er "det", så vil verdien av medlemmet få tilgang til gjennom objektet, som:

it-> str

Legg merke til bruken av piloperatøren her. Iteratoren er som en peker. Dette er grunnen til at i det siste kodesegmentet har hver vektorverdi blitt åpnet som:

it-> str

hvor "det" er iteratoren.

Vektor av pekere av samme type

Eksempel for vektor av pekere til tegn
Følgende program viser et eksempel på en vektor av pekere til chars:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

char ch1 = 'u', ch2 = 'v', ch3 = 'w', ch4 = 'x', ch5 = 'y', ch6 = 'z';
Vector VTR = & CH1, & CH2, & CH3, & CH4, & CH5, & CH6;
for (int i = 0; icout << *vtr[i] << ";
cout << endl;
for (vektor :: iterator it = vtr.begynne(); den != VTR.slutt(); det ++)
cout << **it << ";
cout << endl;
return 0;

Utgangen er:

U v w x y z
U v w x y z

Den samme listen har blitt vist to ganger. Den første uttalelsen i hoved- () -funksjonen skaper 6 tegn med identifikatorene sine. Den andre uttalelsen representerer disse karakterene, med adressene sine i minnet; og det resulterer i en vektor av pekere til chars. Legg merke til malargumentet til denne vektoren. De neste to kodesegmentene, skriv ut den samme vektorlisten på terminalen. Det første av disse kodesegmentene bruker indekser. Den andre bruker iteratorer.

For det første av disse kodesegmentene, siden hvert element i vektoren er en peker, må indeksreferansen henvises av indireksjonsoperatøren, *.

Iteratoren er som en peker. For det andre av disse kodesegmentene, siden hvert element i vektoren er en peker, og iteratoren er som en peker, blir hvert element sett på som en peker til pekeren. Og slik må hvert element bli henvist til to ganger, med **.

Eksempel på vektor av pekere til heltall
Følgende program, som ligner på det ovennevnte, viser et eksempel på en vektor av pekere til INT:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

int int1 = 1000, int2 = 2000, int3 = 3000, int4 = 4000, int5 = 5000, int6 = 6000;
vektor vtr = & int1, & int2, & int3, & int4, & int5, & int6;
for (int i = 0; icout << *vtr[i] << ";
cout << endl;
for (vektor :: iterator it = vtr.begynne(); den != VTR.slutt(); det ++)
cout << **it << ";
cout << endl;
return 0;

Utgangen er:

1000 2000 3000 4000 5000 6000
1000 2000 3000 4000 5000 6000

Den samme listen har blitt vist to ganger, på samme måte som den forrige koden.

Eksempel på vektor av pekere til strengobjekter
En const -peker til chars, peker på en streng bokstavelig. Et strengobjekt blir instantiert fra strengklassen. For å ha et strengobjekt, må strengbiblioteket inkluderes i et direktiv, øverst i programmet. Det er mulig og enkelt å ha en vektor av pekere til strengobjekter, som følgende program viser:

#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

String str1 = "aaa", str2 = "bbb", str3 = "ccc", str4 = "ddd", str5 = "eee", str6 = "fff";
vektor vtr = & str1, & str2, & str3, & str4, & str5, & str6;
for (int i = 0; icout << *vtr[i] << ";
cout << endl;
for (vektor :: iterator it = vtr.begynne(); den != VTR.slutt(); det ++)
cout << **it << ";
cout << endl;
return 0;

Utgangen er:

AAA BBB CCC DDD EEE FFF
AAA BBB CCC DDD EEE FFF

Den samme listen har blitt vist to ganger, på samme måte som den forrige koden.

Vektor av pekere til brukerdefinerte klasseobjekter

Programmereren kan lage sin egen klasse, instantisere objekter fra klassen og deretter legge pekere til objektene, i en vektor. Følgende program illustrerer dette:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
Klasse thecla
offentlig:
const char* str;
Thecla (char chs [])
Str = CHS;

;
int main ()

char ch1 [] = "text1", ch2 [] = "text2", ch3 [] = "text3", ch4 [] = "text4", ch5 [] = "text5";
THECLA OBJ1 (CH1), OBJ2 (CH2), OBJ3 (CH3), OBJ4 (CH4), OBJ5 (CH5);
vektor vtr = & obj1, & obj2, & obj3, & obj4, & obj5;
for (int i = 0; icout cout << endl;
for (vektor :: iterator it = vtr.begynne(); den != VTR.slutt(); det ++)
cout cout << endl;
return 0;

Utgangen er:

text1 text2 text3 text4 text5
text1 text2 text3 text4 text5

Den samme listen har blitt vist to ganger, på samme måte som i forrige kode.

Klassen har en konstruktør og ett offentlig datamedlem. Konstruktøren tildeler argumentet til dette datamedlemmet.

Verdiene til vektoren, denne gangen, er strenglitteraler, og ikke strengobjekter. Så legg merke til hvordan bokstaver og vektorelementer er blitt kodet.

Hvis et objekt som er instantiert fra klassen er OBJ, så vil verdien av medlemmet få tilgang til gjennom objektet, som:

obj.str

OBJ i dette tilfellet er en referanse. Hvis en peker til OBJ er PTR, vil verdien av medlemmet få tilgang til gjennom pekeren, som:

ptr-> str

Dette er grunnen til at i det siste-men-en-kodesegmentet har hver vektorverdi fått tilgang til som:

VTR [i]-> Str

Hvis PTRPTR er en peker til PTR (peker til pekeren), verdien av medlemmet, vil STR få tilgang til via pekeren, som:

(*ptrptr)-> str

Parentesene sikrer at (*ptrptr) blir evaluert først, i stedet for den mulige første evalueringen av (ptrptr-> str).

Iteratoren er som en peker. Dette er grunnen til at i det siste kodesegmentet har hver vektorverdi blitt åpnet som:

(*it)-> str

hvor "det" er iteratoren.

Vektor av pekere til forskjellige typer

For å ha en vektor av pekere til forskjellige typer, bruk følgende prosedyre:

  • La malen til vektoren være peker for å bli ugyldig.
  • La verdiene til vektorene være adresser til de forskjellige objektene av forskjellige typer.
  • Når du leser ut verdiene, må du kaste Void Pointers til passende typer.

Følgende program illustrerer disse, med en røye, int og strengobjekter:

#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

char ch = 'u';
int inte = 1000;
String str = "Jeg elsker deg.";
vektor vtr = & ch, & inte, & str;
cout << *((char*)vtr[0]) << endl;
cout << *((int*)vtr[1]) << endl;
cout << *((string*)vtr[2]) << endl;
retur 0;

Utgangen er:

U
1000
Jeg elsker deg.

Konklusjon

En vektor av pekere ligner på en vektor av objekter. Hovedforskjellene er som følger: Verdiene til vektoren til pekere, må være adresser til objekter som er erklært fra eller instantiert fra klassen. Anta at klassenavnet er Thecla, da må malargumentet til vektoren være "Thecla*". Adressen til et objekt oppnås ved foregående identifikator for objektet, med & .