C ++ - Vektor von Zeigern Beispiele

C ++ - Vektor von Zeigern Beispiele
Ein gewöhnlicher Vektor, der in der C ++ - Programmierung auftritt, ist ein Vektor von Objekten desselben Typs. Diese Objekte können grundlegende Objekte oder Objekte sein, die aus einer Klasse instanziiert sind. Dieser Artikel zeigt Beispiele für Vektor von Zeigern, zum gleichen Objekttyp. Um einen C ++ - Vektor zu verwenden, muss das Programm die Vektorbibliothek mit einer Richtlinie enthalten.

Der gesamte Vektorcode für diesen Artikel ist in der Funktion main (), sofern nicht anders angegeben. Der Vektor von Zeigern auf verschiedene Typen wird jedoch am Ende des Artikels angesprochen. Um den Vektor der Pointers zu schätzen, ist es gut, sich an das Wissen für Vektor von Objekten zu erinnern.

Artikelinhalt

  • Rückruf für Vektor der Objekte
  • Vektor der Zeiger des gleichen Typs
  • Vektor von Zeigern auf verschiedene Typen
  • Abschluss

Rückruf für Vektor von Objekten

Beispielvektor des Charakters
Das folgende Programm zeigt ein Beispiel für einen Vektor von Chars:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

vector vtr = 'u', 'v', 'w', 'x', 'y', 'z';
für (int i = 0; iCout << vtr[i] << ";
Cout << endl;
für (vector :: iterator it = vtr.Start(); Es != vtr.Ende(); es ++)
Cout << *it << ";
Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

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

Die gleiche Liste wurde zweimal angezeigt. Die erste Aussage in der Funktion main () erstellt einen Vektor von Chars. Die nächsten beiden Codesegmente drucken Sie dieselbe Vektorliste am Terminal aus. Der erste dieser Codesegmente verwendet Indizes. Der zweite verwendet Iteratoren.

Vektor des ganzzahligen Beispiels
Das folgende Programm zeigt ein Beispiel für einen Vektor von INTs:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

Vektor vtr = 1, 2, 3, 4, 5, 6;
für (int i = 0; iCout << vtr[i] << ";
Cout << endl;
für (vector :: iterator it = vtr.Start(); Es != vtr.Ende(); es ++)
Cout << *it << ";
Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

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

Die gleiche Liste wurde zweimal auf die gleiche Weise angezeigt, wie im vorherigen Code.

Beispiel für Vektor des String -Objekts
Ein konstanter Zeiger auf Verkoppelungen zeigt auf eine Streicherliteral. Ein String -Objekt wird aus der String -Klasse instanziiert. Um ein String -Objekt zu haben, muss die String -Bibliothek oben im Programm in eine Anweisung enthalten sein. Es ist möglich und einfach, einen Vektor von String -Objekten zu haben, wie das folgende Programm zeigt:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

Vektor vtr = "eins", "zwei", "drei", "vier", "fünf";
für (int i = 0; iCout << vtr[i] << ";
Cout << endl;
für (vector :: iterator it = vtr.Start(); Es != vtr.Ende(); es ++)
Cout << *it << ";
Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

eins zwei drei vier fünf
eins zwei drei vier fünf

Die gleiche Liste wurde zweimal auf die gleiche Weise angezeigt, wie im vorherigen Code.

Vektor des sofortigen Objektbeispiels
Der Programmierer kann seine eigene Klasse erstellen, Objekte aus der Klasse instanziieren und dann die Objekte in einen Vektor legen. Das folgende Programm zeigt dies:

#enthalten
#enthalten
Verwenden von Namespace STD;
Klasse Thecla
öffentlich:
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;
für (int i = 0; iCout << vtr[i].str << ";
Cout << endl;
für (vector :: iterator it = vtr.Start(); Es != vtr.Ende(); es ++)
Cout Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

text1 text2 text3 text4 text5
text1 text2 text3 text4 text5

Die gleiche Liste wurde zweimal auf die gleiche Weise angezeigt, wie im vorherigen Code.

Die Klasse hat einen Konstruktor und ein öffentliches Datenmitglied. Der Konstruktor weist diesem Datenmitglied sein Argument zu.

Die Werte des Vektors sind diesmal String -Literale und keine String -Objekte. Beachten Sie also, wie die Literale und Vektorelemente codiert wurden.

Wenn ein von der Klasse instanziierter Objekt OBJ ist, wird auf den Wert des Elements über das Objekt zugegriffen, wie:

obj.str

OBJ in diesem Fall ist eine Referenz. Beachten Sie die Verwendung des Punktbetreibers. Aus diesem Grund wurde im letzten, aber ein-Code-Segment in der Funktion main () auf jeden Vektorwert zugegriffen, als:

vtr [i].str

wo [i] der Index ist.

Wenn ein Zeiger auf OBJ „It“ ist, wird auf den Wert des Mitglieds über das Objekt zugegriffen, wie:

It-> str

Beachten Sie hier die Verwendung des Pfeiloperators. Der Iterator ist wie ein Zeiger. Aus diesem Grund wurde im letzten Code -Segment auf jeden Vektorwert zugegriffen, als:

It-> str

wo „es“ der Iterator ist.

Vektor der Zeiger des gleichen Typs

Beispiel für Vektor der Zeiger auf Charaktere
Das folgende Programm zeigt ein Beispiel für einen Vektor von Zeigern auf Chars:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

char ch1 = 'u', ch2 = 'v', ch3 = 'w', ch4 = 'x', ch5 = 'y', ch6 = 'z';
Vektor vtr = & ch1, & ch2, & ch3, & ch4, & ch5, & ch6;
für (int i = 0; iCout << *vtr[i] << ";
Cout << endl;
für (vector :: iterator it = vtr.Start(); Es != vtr.Ende(); es ++)
Cout << **it << ";
Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

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

Die gleiche Liste wurde zweimal angezeigt. Die erste Aussage in der Funktion main () erstellt 6 Zeichen mit ihren Kennungen. Die zweite Anweisung repräsentiert diese Zeichen mit ihren Adressen im Speicher; und das führt zu einem Vektor von Zeigern auf Chars. Beachten Sie das Vorlagenargument dieses Vektors. Die nächsten beiden Codesegmente drucken Sie dieselbe Vektorliste am Terminal aus. Die erste dieser Codesegmente verwendet Indizes. Der zweite verwendet Iteratoren.

Für das erste dieser Codesegmente muss die Indexreferenz vom Indirektionoperator * Derferfered werden, da jedes Element im Vektor ein Zeiger ist *.

Der Iterator ist wie ein Zeiger. Für die zweite dieser Codesegmente, da jedes Element im Vektor Zeiger ist und der Iterator wie ein Zeiger ist, wird jedes Element als Zeiger auf Zeiger angesehen. Und so muss jedes Element zweimal mit ** Derferen.

Beispiel des Vektors der Zeiger auf Ganzzahlen
Das folgende Programm, das dem oben genannten ähnlich ist, zeigt ein Beispiel für einen Vektor von Zeigern zu INTs:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

int1 = 1000, int2 = 2000, int3 = 3000, int4 = 4000, int5 = 5000, int6 = 6000;
Vector vtr = & int1, & int2 & int3, & int4, & int5, & int6;
für (int i = 0; iCout << *vtr[i] << ";
Cout << endl;
für (vector :: iterator it = vtr.Start(); Es != vtr.Ende(); es ++)
Cout << **it << ";
Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

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

Die gleiche Liste wurde zweimal auf die gleiche Weise nach dem vorherigen Code angezeigt.

Beispiel des Vektors von Zeigern auf String -Objekte
Ein konstanter Zeiger auf Verkoppelungen zeigt auf eine Streicherliteral. Ein String -Objekt wird aus der String -Klasse instanziiert. Um ein String -Objekt zu haben, muss die String -Bibliothek oben im Programm in eine Anweisung enthalten sein. Es ist möglich und einfach, einen Vektor von Zeigern auf String -Objekte zu haben, wie das folgende Programm zeigt:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

String str1 = "aaa", str2 = "bbb", str3 = "ccc", str4 = "ddd", str5 = "eee", str6 = "fff";
Vektor vtr = & str1, & str2, & str3, & str4, & str5, & str6;
für (int i = 0; iCout << *vtr[i] << ";
Cout << endl;
für (vector :: iterator it = vtr.Start(); Es != vtr.Ende(); es ++)
Cout << **it << ";
Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

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

Die gleiche Liste wurde zweimal auf die gleiche Weise nach dem vorherigen Code angezeigt.

Vektor der Zeiger auf benutzerdefinierte Klassenobjekte

Der Programmierer kann seine eigene Klasse erstellen, Objekte aus der Klasse instanziieren und dann in einem Vektor Zeiger auf die Objekte setzen. Das folgende Programm zeigt dies:

#enthalten
#enthalten
Verwenden von Namespace STD;
Klasse Thecla
öffentlich:
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;
für (int i = 0; iCout Cout << endl;
für (vector :: iterator it = vtr.Start(); Es != vtr.Ende(); es ++)
Cout Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

text1 text2 text3 text4 text5
text1 text2 text3 text4 text5

Die gleiche Liste wurde zweimal auf die gleiche Weise angezeigt, wie im vorherigen Code.

Die Klasse hat einen Konstruktor und ein öffentliches Datenmitglied. Der Konstruktor weist diesem Datenmitglied sein Argument zu.

Die Werte des Vektors sind diesmal String -Literale und keine String -Objekte. Beachten Sie also, wie die Literale und Vektorelemente codiert wurden.

Wenn ein von der Klasse instanziierter Objekt OBJ ist, wird auf den Wert des Elements über das Objekt zugegriffen, wie:

obj.str

OBJ in diesem Fall ist eine Referenz. Wenn ein Zeiger auf OBJ PTR ist, wird auf den Wert des Mitglieds über den Zeiger zugegriffen, als:

ptr-> str

Aus diesem Grund wurde im letzten, aber ein-Code-Segment auf jeden Vektorwert zugegriffen als:

vtr [i]-> str

Wenn PTRPTR ein Zeiger auf PTR (Zeiger auf Zeiger) ist, wird auf den Wert des Mitglieds über den Zeiger zugegriffen, wie es:

(*ptrptr)-> str

Die Klammern stellen sicher, dass (*ptrptr) zuerst bewertet wird, anstatt der möglichen ersten Bewertung von (ptrptr-> str).

Der Iterator ist wie ein Zeiger. Aus diesem Grund wurde im letzten Code -Segment auf jeden Vektorwert zugegriffen, als:

(*es)-> str

wo „es“ der Iterator ist.

Vektor von Zeigern auf verschiedene Typen

Verwenden Sie das folgende Verfahren, um einen Vektor von Zeigern für verschiedene Typen zu erhalten:

  • Lassen Sie die Schablone des Vektors auf ungültig sein.
  • Lassen Sie die Werte der Vektoren Adressen der verschiedenen Objekte verschiedener Typen sein.
  • Wenn Sie die Werte lesen, werfen Sie die Hohlraumzeiger auf ihre entsprechenden Typen.

Das folgende Programm veranschaulicht diese mit einem char-, int- und String -Objekten:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

char ch = 'u';
int inte = 1000;
String str = "Ich liebe dich.";
Vector vtr = & ch, & ide, & str;
Cout << *((char*)vtr[0]) << endl;
Cout << *((int*)vtr[1]) << endl;
Cout << *((string*)vtr[2]) << endl;
Rückkehr 0;

Die Ausgabe ist:

U
1000
Ich liebe dich.

Abschluss

Ein Vektor von Zeigern ähnelt einem Vektor von Objekten. Die Hauptunterschiede sind wie folgt: Die Werte des Vektors von Zeigern müssen Adressen von Objekten sein, die aus der Klasse deklariert oder aus der Klasse instanziiert wurden. Angenommen, der Klassenname ist Thecla, dann muss das Vorlagenargument des Vektors "Thecla*" sein. Die Adresse eines Objekts wird erhalten, indem die Kennung des Objekts vorhanden ist, mit & .