Vettore C ++ di esempi di puntatori

Vettore C ++ di esempi di puntatori
Un vettore ordinario riscontrato nella programmazione C ++, è un vettore di oggetti dello stesso tipo. Questi oggetti possono essere oggetti fondamentali o oggetti istanziati da una classe. Questo articolo illustra esempi di vettore di puntatori, allo stesso tipo di oggetto. Per utilizzare un vettore C ++, il programma deve includere la libreria vettoriale, con una direttiva.

Tutto il codice vettoriale per questo articolo è nella funzione principale (), se non diversamente indicato. Il vettore di puntatori a diversi tipi, è tuttavia affrontato alla fine dell'articolo. Per apprezzare il vettore di puntatori, è bene ricordare le conoscenze per il vettore degli oggetti.

Contenuto dell'articolo

  • Ricordiamo per vettoriale di oggetti
  • Vettore di puntatori dello stesso tipo
  • Vettore di puntatori a diversi tipi
  • Conclusione

Ricordiamo per vettore di oggetti

Vettore dell'esempio del personaggio
Il seguente programma, mostra un esempio di un vettore di caratteri:

#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

vector vtr = 'u', 'v', 'w', 'x', 'y', 'z';
per (int i = 0; icout << vtr[i] << ";
cout << endl;
per (Vector :: iterator IT = VTR.inizio(); Esso != vtr.FINE(); It ++)
cout << *it << ";
cout << endl;
restituzione 0;

L'output è:

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

Lo stesso elenco è stato visualizzato due volte. La prima dichiarazione nella funzione principale () crea un vettore di caratteri. I successivi due segmenti di codice, stampano lo stesso elenco vettoriale nel terminale. Il primo di questi segmenti di codice utilizza gli indici. Il secondo usa iteratori.

Vettore dell'esempio intero
Il seguente programma mostra un esempio di un vettore di INT:

#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

vector vtr = 1, 2, 3, 4, 5, 6;
per (int i = 0; icout << vtr[i] << ";
cout << endl;
per (Vector :: iterator IT = VTR.inizio(); Esso != vtr.FINE(); It ++)
cout << *it << ";
cout << endl;
restituzione 0;

L'output è:

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

Lo stesso elenco è stato visualizzato due volte, allo stesso modo, come nel codice precedente.

Vettore dell'esempio di oggetti stringa
Un puntatore const a Chars, punta a una corda letterale. Un oggetto stringa viene istanziato dalla classe stringa. Per avere un oggetto stringa, la libreria di stringa deve essere inclusa con una direttiva, nella parte superiore del programma. È possibile e facile avere un vettore di oggetti stringa, come mostra il seguente programma:

#includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

vector vtr = "one", "due", "tre", "quattro", "cinque";
per (int i = 0; icout << vtr[i] << ";
cout << endl;
per (Vector :: iterator IT = VTR.inizio(); Esso != vtr.FINE(); It ++)
cout << *it << ";
cout << endl;
restituzione 0;

L'output è:

uno due tre quattro cinque
uno due tre quattro cinque

Lo stesso elenco è stato visualizzato due volte, allo stesso modo, come nel codice precedente.

Vettore dell'esempio di oggetti istanziati
Il programmatore può creare la propria classe, istanziare oggetti dalla classe e quindi mettere gli oggetti in un vettore. Il seguente programma illustra questo:

#includere
#includere
Utilizzo dello spazio dei nomi std;
class thecla
pubblico:
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);
vettoriale vtr = obj1, obj2, obj3, obj4, obj5;
per (int i = 0; icout << vtr[i].str << ";
cout << endl;
per (Vector :: iterator IT = VTR.inizio(); Esso != vtr.FINE(); It ++)
cout cout << endl;
restituzione 0;

L'output è:

text1 text2 text3 text4 text5
text1 text2 text3 text4 text5

Lo stesso elenco è stato visualizzato due volte, allo stesso modo, come nel codice precedente.

La classe ha un costruttore e un membro dei dati pubblici. Il costruttore assegna il suo argomento a questo membro dei dati.

I valori del vettore, questa volta, sono letterali stringhe e non oggetti stringa. Quindi, nota il modo in cui i letterali e gli elementi vettoriali sono stati codificati.

Se un oggetto istanziato dalla classe è OBJ, allora il valore del membro, STR sarebbe accessibile tramite l'oggetto, come:

obj.str

OBJ in questo caso è un riferimento. Nota l'uso dell'operatore DOT. Questo è il motivo per cui, nel segmento di codice dell'ultimo ma uno, nella funzione principale (), ogni valore vettoriale è stato accessibile come:

VTR [i].str

dove [i] è l'indice.

Se un puntatore a OBJ è "esso", allora il valore del membro, STR sarebbe accessibile tramite l'oggetto, come:

It-> str

Nota l'uso dell'operatore freccia qui. L'iteratore è come un puntatore. Questo è il motivo per cui, nell'ultimo segmento di codice, ogni valore vettoriale è stato accessibile come:

It-> str

dove "esso" è l'iteratore.

Vettore di puntatori dello stesso tipo

Esempio per vettore di puntatori ai personaggi
Il seguente programma, mostra un esempio di un vettore di puntatori a caratteri:

#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

char ch1 = 'u', ch2 = 'v', ch3 = 'w', ch4 = 'x', ch5 = 'y', ch6 = 'z';
vector vtr = & ch1, & ch2, & ch3, & ch4, & ch5, & ch6;
per (int i = 0; icout << *vtr[i] << ";
cout << endl;
per (Vector :: iterator IT = VTR.inizio(); Esso != vtr.FINE(); It ++)
cout << **it << ";
cout << endl;
restituzione 0;

L'output è:

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

Lo stesso elenco è stato visualizzato due volte. La prima affermazione nella funzione principale () crea 6 caratteri con i loro identificatori. La seconda affermazione rappresenta questi personaggi, con i loro indirizzi in memoria; E questo si traduce in un vettore di puntatori in carbone. Nota l'argomento modello di questo vettore. I successivi due segmenti di codice, stampano lo stesso elenco vettoriale nel terminale. Il primo di questi segmenti di codice utilizza gli indici. Il secondo usa iteratori.

Per il primo di questi segmenti di codice, poiché ogni elemento del vettore è un puntatore, il riferimento dell'indice deve essere derenziato dall'operatore indirezione, *.

L'iteratore è come un puntatore. Per il secondo di questi segmenti di codice, poiché ogni elemento del vettore è un puntatore e l'iteratore è come un puntatore, ogni elemento è visto come un puntatore al puntatore. E quindi ogni elemento deve essere derenziato due volte, con **.

Esempio di vettore di puntatori ai numeri interi
Il seguente programma, che è simile a quello sopra, mostra un esempio di un vettore di puntatori per INT:

#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

Int Int1 = 1000, int2 = 2000, int3 = 3000, int4 = 4000, int5 = 5000, int6 = 6000;
vector vtr = & int1, & int2, & int3, & int4, & int5, & int6;
per (int i = 0; icout << *vtr[i] << ";
cout << endl;
per (Vector :: iterator IT = VTR.inizio(); Esso != vtr.FINE(); It ++)
cout << **it << ";
cout << endl;
restituzione 0;

L'output è:

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

Lo stesso elenco è stato visualizzato due volte, allo stesso modo, a partire dal codice precedente.

Esempio di vettore di puntatori in oggetti stringa
Un puntatore const a Chars, punta a una corda letterale. Un oggetto stringa viene istanziato dalla classe stringa. Per avere un oggetto stringa, la libreria di stringa deve essere inclusa con una direttiva, nella parte superiore del programma. È possibile e facile avere un vettore di puntatori per stringere gli oggetti, come mostra il seguente programma:

#includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

String Str1 = "AAA", str2 = "bbb", str3 = "ccc", str4 = "dDD", str5 = "eee", str6 = "fff";
vector vtr = & STR1, & STR2, & STR3, & STR4, & STR5, & STR6;
per (int i = 0; icout << *vtr[i] << ";
cout << endl;
per (Vector :: iterator IT = VTR.inizio(); Esso != vtr.FINE(); It ++)
cout << **it << ";
cout << endl;
restituzione 0;

L'output è:

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

Lo stesso elenco è stato visualizzato due volte, allo stesso modo, a partire dal codice precedente.

Vettore di puntatori agli oggetti di classe definiti dall'utente

Il programmatore può creare la propria classe, istanziare oggetti dalla classe e quindi mettere puntatori agli oggetti, in un vettore. Il seguente programma illustra questo:

#includere
#includere
Utilizzo dello spazio dei nomi std;
class thecla
pubblico:
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);
vector vtr = & obj1, & obj2, & obj3, & obj4, & obj5;
per (int i = 0; icout cout << endl;
per (Vector :: iterator IT = VTR.inizio(); Esso != vtr.FINE(); It ++)
cout cout << endl;
restituzione 0;

L'output è:

text1 text2 text3 text4 text5
text1 text2 text3 text4 text5

Lo stesso elenco è stato visualizzato due volte, allo stesso modo, come nel codice precedente.

La classe ha un costruttore e un membro dei dati pubblici. Il costruttore assegna il suo argomento a questo membro dei dati.

I valori del vettore, questa volta, sono letterali stringhe e non oggetti stringa. Quindi, nota il modo in cui i letterali e gli elementi vettoriali sono stati codificati.

Se un oggetto istanziato dalla classe è OBJ, allora il valore del membro, STR sarebbe accessibile tramite l'oggetto, come:

obj.str

OBJ in questo caso è un riferimento. Se un puntatore a OBJ è PTR, allora il valore del membro, STR sarebbe accessibile tramite il puntatore, come:

ptr-> str

Questo è il motivo per cui nel segmento di codice dell'ultimo ma uno, ogni valore vettoriale è stato accessibile come:

VTR [i]-> STR

Se PTRPTR è un puntatore a PTR (puntatore al puntatore), il valore del membro, STR sarebbe accessibile tramite il puntatore, come:

(*ptrptr)-> str

Le parentesi assicurano che (*ptrptr) venga valutato per primo, anziché la possibile prima valutazione di (ptrptr-> str).

L'iteratore è come un puntatore. Questo è il motivo per cui nell'ultimo segmento di codice, ogni valore vettoriale è stato accessibile come:

(*it)-> str

dove "esso" è l'iteratore.

Vettore di puntatori a diversi tipi

Per avere un vettore di puntatori a diversi tipi, utilizzare la seguente procedura:

  • Lascia che il modello del vettore sia punta.
  • Lascia che i valori dei vettori, siano indirizzi dei diversi oggetti di diversi tipi.
  • Quando leggi i valori, lancia i puntatori vuoti ai loro tipi appropriati.

Il seguente programma illustra questi, con oggetti Char, Int e String:

#includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

char ch = 'u';
int inte = 1000;
String str = "Ti amo.";
vector vtr = & ch, & inte, & str;
cout << *((char*)vtr[0]) << endl;
cout << *((int*)vtr[1]) << endl;
cout << *((string*)vtr[2]) << endl;
restituzione 0;

L'output è:

U
1000
Ti amo.

Conclusione

Un vettore di puntatori è simile a un vettore di oggetti. Le differenze principali sono le seguenti: i valori del vettore dei puntatori, devono essere indirizzati agli oggetti dichiarati o istanziati dalla classe. Supponiamo che il nome di classe sia ilcla, quindi l'argomento del modello del vettore deve essere "Thecla*". L'indirizzo di un oggetto si ottiene precedenti l'identificatore dell'oggetto, con & .