2016-04-24 22 views
0

Ich habe etwas, wo firstname_list ist ein Vektor (Datentyp String) von Zeigern. So sieht es aus wie vector <string*> firstname_list;. Innerhalb davon sind Adressen von Strings gespeichert. Wenn ich versuche, so etwas zu tun:Iterieren durch einen Vektor von Zeigern und Ausdrucken von Werten?

cout << *(firstname_list[0]);

Es dereferenzieren die Adresse würde und geben Sie mir die Zeichenfolge ich brauche.

Allerdings habe ich versucht, eine Schleife mit einem Iterator zu erstellen, die ich auf dieser Seite gelesen, und ich versuchte dies:

vector<string*>::iterator iter; 
for (iter = firstname_list.begin(); iter != firstname_list.end(); ++iter) 
    cout << *(firstname_array[iter]); 

aber jetzt ist es nicht und stattdessen druckt gibt einen Fehler:

error C2679: binary '[' : no operator found which takes a right-hand operand of type 

'std::_Vector_iterator<std::_Vector_val<std::_Simple_types<std::basic_string<cha 

r,std::char_traits<char>,std::allocator<char>> *>>>' (or there is no acceptable conversion) 

Ich habe andere Threads ähnlich zu diesem Thema untersucht, wo Leute fragen, wie man durch eine Schleife iteriert, aber ich konnte es immer noch nicht herausfinden. Jede Hilfe, warum ich diese Nachricht bekomme, wird geschätzt!

+2

Nur 'cout << * iter'. –

+1

'firstname_list',' firstname_array' was ?? Könnten Sie bitte konsequent bleiben? –

+0

cout << * iter; // Benutze den Iterator direkt. – Steve

Antwort

4

Nun, wenn Sie C++ 11 verwenden, dann haben Sie Glück.

for (const auto& str: firstname_list) 
    std::cout << *str << std::endl; 

Ansonsten:

vector<string*>::iterator iter; 
for (iter = firstname_list.begin(); iter != firstname_list.end(); ++iter) 
    std::cout << **iter; 

Hinweis: wie in den Kommentaren erwähnt, haben Sie zweimal Iterator zu dereferenzieren. Wenn es auf eine char * zeigt, dann wäre ein einzelner Stern in Ordnung.

+0

"für (const auto & str: vorname_liste)" wäre noch besser gewesen. –

+2

Die zweite erfordert auch C++ 11 ('auto'). Um die Zeichenfolge (anstelle des Zeigers) zu drucken, müssen Sie zweimal die Dereferenzierung durchführen. 'std :: cout << ** iter;' –

+0

Sie mein Freund sind ein Assistent, danke – StacksAndParsing

Verwandte Themen