String-Vektor variabler Größe
-
Hm, wieso geht das Folgende nicht? Ich weiß, dass es nicht besonders sinnvoll aussieht, aber sowas ähnliches brauche ich in einem meiner Programme...
int players = 4; string names[players] = {"Joe", "Jack", "John", "Jim"};
Es kommt eine Fehlermeldung - dürfen String-Vektoren keine variable Größe haben?
mfG,
Matthias
-
Nein.
Mach mal ne Konstante aus "players", dann müsste es gehen.Gruß, Kai.
-
Doch, wenn man einen Zeiger auf dynamisch reservierten Speicher setzt.
Beispiel:unsigned int s; ... std::cout << "\n Size: "; std::cin >> s; std::string* v = new std::string[s]; // Speicher für String-Array mit s Elementen reservieren
Caipi
-
wenn du es sowieso hardcodest dann kannst ja die "player" variable gleich weglassen..
@Caipi:
da wuerd ich aber lieber sowas nehmenstd::vectr<std::string> vplayers;
-
Jo. Das ist einfacher, sicherer und komfortabler zu bedienen.
Weiß auch nicht, warum ich das gestern nicht mehr erwähnt habe.Caipi
-
Tut mir leid, aber was macht dieser Code hier?
std::vectr<std::string> vplayers;
Heißt der erstellte Vektor vplayers? Wo steckt hier seine Länge?
-
MatthiasK schrieb:
Tut mir leid, aber was macht dieser Code hier?
std::vector<std::string> vplayers;
Heißt der erstellte Vektor vplayers? Wo steckt hier seine Länge?
Dieser Code erstellt (abgesehen vom Schreibfehler ;)) einen std::vector vplayers mit (bisher) 0 Elementen vom Typ std::string.
Der Vorteil dieser Vektor-Klasse ist, dass sie den erforderlichen Speicher selbstständig reserviert und/oder freigibt. Um jetzt beispielsweise ein Element an den Vektor anzufügen, schreibst duvplayers.push_back(dein_anzufuegender_string);
Am besten du schaust mal in verschiedenen Tutorials und Büchern nach der STL (Standard Template Library), std::vector ist nämlich Bestandteil von ihr.
Caipi
-
MatthiasK schrieb:
Tut mir leid, aber was macht dieser Code hier?
std::vectr<std::string> vplayers;
Heißt der erstellte Vektor vplayers? Wo steckt hier seine Länge?
die Länge steckt in vplayers.size() und ist im Moment 0.
Nach
vplayers.push_back(...);
vplayers.push_back(...);
vplayers.push_back(...);Wäre sie demnach 3.
Nach vplayers.pop_back();
Wäre sie wieder 2...