Array mit einer unbekannten Anzahl an Elementen



  • Hi,
    neues Thema, neues Glück 😃
    Diesmal ist folgende Frage:
    Ich hab ein Array an Strings:

    std::string array[4];
    

    Passt ja alles, aber ich möchte dieses Array laufend erweitern können. Also es ist nicht fix, dass jetz wie hier 5 Elemente oder 10 Elemente darin vorhanden sein können.
    Bei PHP ging das ja ziemlich einfach:

    $array = array();
    $array[] = "xy";
    $array[] = "z";
    

    Wie mach ich das aber in C++?



  • Dafür nutzt du am besten
    std::vectorstd::string der übernimmt die dynamische Speicherverwaltung und vergrößerung, wenn du neue Element einfügst, für dich.
    Und dort nutzt du die Funktion
    std::vector<T>::push_back(T t)



  • Okay, aber was wenn ich jetz den Typ int habe?

    //edit... sorry, hab mir gedacht das geht nur mit string

    Danke

    //edit2: Ich bekomme einen Error bei folgendem:

    #include <iostream>
    #include <string>
    #include <vector>
    
    vector<std::string> array;
    

    expected constructor, destructor, or type conversion before '<' token

    An was liegt das? Error bezieht sich auf letzte Zeile (vom Code den ich hergezeigt hab).



  • Dann setzt du den für den Typen im vector ein.

    std::vector<int>;
    std::vector<T> ist ein Template.Dort kannst du die Typen einsetzen die du möchtest.



  • Lumio schrieb:

    vector<std::string> array;
    

    expected constructor, destructor, or type conversion before '<' token

    An was liegt das? Error bezieht sich auf letzte Zeile (vom Code den ich hergezeigt hab).

    std::vector, statt einfach nur vector.



  • Danke 🙂 das mit den namespaces kapier ich noch nicht genau, was für einen sinn die machen.

    Aber sonst klappts ganz gut 🙂 danke.



  • Naja der namespace macht schon sinn, da z.B. ich auch eine Klasse vector neu definieren könnte...
    z.B. math::vector, der einen 3-dimensionalen vector beschreibt, auf dem man kreuzprodukte und sonstiges defnieren kann.
    Natürlich will ich dass die klasse vector heißt (ist ja schließlich ein vector und kein string).
    Und da der vector im namespace std:: liegt, kann ich meinen vector einfach in einen namespace legen und den gleichen klassennamen haben. Und es kommt nicht zu verwechslungen später, wenn man immer schön den namespace mit angibt.


Anmelden zum Antworten