Strukturen, Strings und Array/vectoren



  • @Mattes_meu :

    irgendwann über die noch nicht behandelte Vectorklasse etwas verärgert war, und dann wild rumprobiert habe. Ich habe zahlreiche Artikel dazu durchgelesen, doch meinem Verständnis hat das nicht geholfen.

    Kam in den zahlreichen Artikeln auch die in der Linkliste (ganz oben im Forum) erwähnte https://de.cppreference.com/w/ vor? Dort findest Du unter Container-Bibliothek direkt einen Link zu https://de.cppreference.com/w/cpp/container/vector.

    Schau Dir erst mal die Modifiers und den Elementzugriff genauer an. Die Iteratoren gehst Du an, sobald Du Dir selber mit Deinen eigenen Worten die Funktionen zum

    • Einfügen von schuh

    • Auslesen von schuh

    • Löschen von schuh

    erklären kannst.

    Für das getline in Zeile 20 findest Du dann sicher auch noch eine elegantere Möglichkeit, die sogar funktionieren könnte.



  • @daMicha sagte in Strukturen, Strings und Array/vectoren:

    @Mattes_meu :

    irgendwann über die noch nicht behandelte Vectorklasse etwas verärgert war, und dann wild rumprobiert habe. Ich habe zahlreiche Artikel dazu durchgelesen, doch meinem Verständnis hat das nicht geholfen.

    Kam in den zahlreichen Artikeln auch die in der Linkliste (ganz oben im Forum) erwähnte https://de.cppreference.com/w/ vor? Dort findest Du unter Container-Bibliothek direkt einen Link zu https://de.cppreference.com/w/cpp/container/vector.

    Schau Dir erst mal die Modifiers und den Elementzugriff genauer an. Die Iteratoren gehst Du an, sobald Du Dir selber mit Deinen eigenen Worten die Funktionen zum

    • Einfügen von schuh

    • Auslesen von schuh

    • Löschen von schuh

    erklären kannst.

    Für das getline in Zeile 20 findest Du dann sicher auch noch eine elegantere Möglichkeit, die sogar funktionieren könnte.

    OK, vielen Dank schonmal 😊



  • Ich weiß nicht, wie gut, bzw. sicher Du im Umgang mit struct bist. Wenn das auch noch Neuland für Dich ist, solltest Du Dich evtl. erst mal vom Schuh verabschieden und den Umgang mit vector mit einem einfachen Datentyp wie int lernen?



  • Und zu deinem eigenen Verständnis solltest du die Variablen besser benennen, d.h. die Struktur schuh und den vector schuhe. 😉



  • @Mattes_meu sagte in Strukturen, Strings und Array/vectoren:

    Ich würde mich sehr freuen wenn mir jemand die Vectorklasse erklären könnte, bzw. mir sagen könnte wie diese arbeitet und angewendet wird.

    std::vector.

    Wenn Du etwas besonderes wissen willst fehlt da eine Frage.



  • Hallo Mattes, fand das eine interessante Aufgabe um mich als C++ -Neuling auch mal an Vectoren zu versuchen meine funktionierende Lösung sieht so aus:

    #include <string>
    #include <iostream>
    #include <vector>](Link Adresse)
    using namespace std;

    int main(void)
    {
    struct schuh
    {
    int nummer;
    string marke;
    string farbe;
    float preis;
    };
    schuh sSchuh;
    vector<schuh> vecSchuhe;
    char strMarke[20], strFarbe[10]; float fPreis;
    for (int i = 0; i < 3; i++)
    {
    sSchuh.nummer = i+1;
    cout << "Gib die Marke ein: ";
    cin >> strMarke;
    sSchuh.marke = strMarke;
    cout << "Gib die Farbe ein: ";
    cin >> strFarbe;
    sSchuh.farbe = strFarbe;
    cout << "Gib den Preis ein: ";
    cin >> fPreis;
    sSchuh.preis = fPreis;
    vecSchuhe.push_back(sSchuh);
    }
    for (schuh s : vecSchuhe)
    {
    cout << s.nummer <<' ';
    cout << s.marke << ' ';
    cout << s.farbe << ' ';
    cout << s.preis << endl;
    }
    return 0;
    }

    Alles in die main zu packen ist wahrscheinlich schlechter Stil, funktioniert zum Üben aber erstmal. Die for-Schleife liest nicht beliebig viele, sondern zur Probe erstmal 3 Schuhe ein, aber das sollte sich ohen großen Aufwand auf "beliebig viele" umstellen lassen. Außerdem habe ich in meiner Struktur ein wenig andere Eigenschaften aber das ändert am Prinzip nichts. An deinem Codeschnipsel ist schonmal falsch, dass die Strukturvariable und die Vectorvariable beide "schuh" heißen. Die einzelnen Eigenschaften bei der Ein- und Ausgabe der Struktur muss man einzeln ansprechen. Lediglich das "anbacken" eines Schuhpaars (einer fertig gefüllten Schuh-Struktur) an den Vector kann mittels der Zeile "vecSchuhe.push_back(sSchuh)" in einem Rutsch für alle Eigenschaften der Struktur geschehen. Also du musst erstmal deine Strukturvariable mit Eigenschaften füllen, bevor du sie an den Vektor "andockst". Eine gute Idee ist es, den Variablenanfang wie den Datentyp zu benennen, also iVar für Integer, sSchuh für eine Struktur oder strKette für eine Zeichenkette. Habe ich vom OneLoneCoder javidx9 gelernt, dessen youtube-Videos ich nur wärmstens empfehlen kann!

    Gruß
    Guybrush55



  • @Guybrush55

    Eine gute Idee ist es, den Variablenanfang wie den Datentyp zu benennen

    Nein, das ist eine blöde Idee.

    char m[20]

    Warum? Benutze std::string, nicht char arrays. Außerdem kann man direkt in die Struktur einlesen.



  • Hallo Manni,
    ja habe gerade gemerkt, dass ich es selbst nicht konsequent so gemacht habe und deshalb nochmal editiert. Die Idee dahinter ist, dass man am Variablennamen erkennt, welchen Typ die Variable hat - finde ich nicht schlecht. Mit dem char-Array hast du recht, oje, diese alten C-Anhängsel die ich noch im Kopf habe. Für das direkt in die Struktur einlesen wäre ein Beispiel ganz hilfreich. Bin eben, wie gesagt, noch Neuling.
    MfG
    Guybrush55



  • @Guybrush55

    Die ungarische Notation ist mir durchaus bekannt. Aber es ist dennoch eine blöde Idee.

    Siehe auch Bjarne Stroustrup:

    No I don't recommend "Hungarian". I regard "Hungarian" (embedding an abbreviated version of a type in a variable name) a technique that can be useful in untyped languages, but is completely unsuitable for a language that supports generic programming and object-oriented programming - both of which emphasize selection of operations based on the type an arguments (known to the language or to the run-time support). In this case, "building the type of an object into names" simply complicates and minimizes abstraction. To various extent, I have similar problems with every scheme that embeds information about language-technical details (e.g., scope, storage class, syntactic category) into names. I agree that in some cases, building type hints into variable names can be helpful, but in general, and especially as software evolves, this becomes a maintenance hazard and a serious detriment to good code. Avoid it as the plague.



  • @manni66
    ok, wenn der Erfinder von C++ es sagt, will ich dem nicht widersprechen. Und das mit dem Beispiel für direktes Einlesen hat sich erledigt, hab's kapiert einfach "cin >> sSchuh.marke" anstatt umständlich über die - extra über der for-Schleife deklarierten - Variablen.
    Mfg
    Guybrush55


Log in to reply