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 nehmen

    std::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 du

    vplayers.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...


Anmelden zum Antworten