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 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 ++)
CoutCout << 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 ++)
CoutCout << 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:
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 & .