2016-04-05 8 views
0
vector<string>* v1 = new vector<string>(10, ""); 
(*v1)[2] = "aaa"; 

Jetzt möchte ich, ohne den Zeiger v1 verwenden, um es zu dereferenzieren, mit dem Pfeil Betreiber:C++ Wie führe ich Item-Zuweisung auf einem Vektorzeiger durch?

v1->[2] = "aaa"; // DOES NOT COMPILE 

Was bin ich? Ist es möglich?

+2

Kommen Sie von Java oder C#? In C++ ist es nicht notwendig, 'new' zu verwenden, um ein Objekt zu erzeugen, und in" modernem "C++ ist es selten notwendig, Zeiger außerhalb des Polymorphismus zu verwenden. –

+1

Und um Ihre Frage zu beantworten, können Sie z.B. 'v1-> operator [] (2)', die den Zweck der Überlastung des Operators vereitelt. –

+1

@JoachimPileborg Danke! Aber das hat nichts mit der Frage zu tun. –

Antwort

1

Wie Sie festgestellt haben, funktioniert die überladene Operatorsyntax nicht mit dem Pfeiloperator. Aber die vollständige Methode Namens tut:

v1->operator[](2) = "aaa"; 

Das heißt, der Pfeil Operator ist ein Dereferenzierungsoperator. Diese beiden Zeilen sind gleichwertig:

(*v1).foo() 
v1->foo() 

Ich sehe keinen besonders guten Grund, einen über den anderen zu bevorzugen.

In jedem Fall ist der Operator [] nicht die einzige Methode, die ein Array-Element aus einem Vektor abruft. Wie in den Kommentaren erwähnt, ist der Aufruf von get() fast gleichwertig (es fügt Grenzen hinzu, ist aber ansonsten identisch).

+0

Wenn Sie möchten, dass es etwas besser aussieht, können Sie 'vi -> at (2)' verwenden. Die 'at()' member Funktion fügt die Überprüfung der Grenzen hinzu, ist aber ansonsten äquivalent zu 'operator [] ' – vu1p3n0x

Verwandte Themen