Unterelementanzahl eines Vectors bestimmen



  • Hallo,

    ich stehe gerade etwas auf dem Schlauch und Googlen hat leider bisher nicht geholfen 😉

    Ich habe einen Vektor "vektor[x][y]", wobei y für das erste Element in x z.B. so aussieht (12, 15; 16, 28; 34, 60).

    Ich möchte nun bestimmten, wie viele Wertepaare y besitzt. Also hier wären es ja drei.

    Wenn ich nun vektor.size() nutzen würde, bekäme ich ja wie viele Elemente es von X gibt, aber wie bekomme ich raus wie viele Wertepaare y besitzt?

    Danke 🙂



  • vector.front().size()

    Aber ich würde den Vektor nur eindimensional, nicht verschachtelt speichern und Indizes umrechnen. Dann kannst du die Dimensionen in separaten Variablen mitführen.



  • Vielen Dank, funkioniert einwandfrei 👍

    Der Vektor wird so von einer Bibliotheksfunktion geliefert und darum lasse ich ihn so 😉



  • Denk dran, dass front() kracht, wenn die erste Dimension leer ist.

    Von daher vielleicht eher

    vector.empty() ? 0 : vector.front().size()
    


  • Vielen Dank für den Hinweis 🙂

    Ich habe doch noch ein Problem entdeckt.

    Wenn ich nun folgendes schreibe fehlt mir in der zweiten for-Schleife die Laufvariable x.

    for( uint x = 0; x< vektor.size(); x++ )
             {
                  for( uint y = 0; y< vektor.front().size(); y++ )  
                      {
                      }
             }
    

    Wie kann ich jetzt noch in die Bedingung der zweiten Schleife schreiben, dass er die Elementeanzahl in Abhängigkeit der Laufvariable x bestimmt?



  • Front ist falsch. Du willst ja nicht das erste Element, sondern das x-te. Damit beantwortet sich deine Frage.

    Wenn du die Indizes innerhalb nicht brauchst, würde ich eher Iteratoren nehmen, oder gleich Range-Based For.

    for (auto& subvector : vector)
    {
        for (auto& elem : subvector)
        {
            ...
        }
    }
    


  • Ich verarbeite die Vektoren schon komplett, also wirklich jedes einzelne Unterelement.

    Um bestimmte Dinge zu berechnen brauche ich aber eben die Unteranzahl jedes X-ten Elements.

    Ich muss gestehen ich bin Anfänger und habe sogar gerade einen kleinen C++-Kurs mitgemacht, aber Iteratoren kamen dort nicht vor und sind mir noch unbekannt.

    Gibt es eine einfache Funktion, die das tut, was ich möchte?

    Danke 🙂



  • Ja, habe ich ja geschrieben. Was ist das Problem? Greif eben auf das x-te Element statt front() zu.



  • Das Problem ist, dass ich den von dir geposteten Code nicht verstehe.

    Ich weiß nicht, wie eine for-Schleife so funktionieren soll und auch nicht, wie ich das nun wirklich umsetzen soll.

    Meine C++-Kenntnisse reichen da leider nicht aus und Google hat mir beim Verstehen auch nicht geholfen. 😞



  • Wie greift man auf das x-te Element zu?
    -> Index-Operator

    Wie kann man also die Grösse des x-ten Elements berechnen?
    -> Index-Operator und size()

    Du bist schon recht nah dran mit deinem letzten Code, aber front() ist falsch. Klar kann ich dir einfach die Lösung hinschreiben, aber ich hoffe, dass du besseres Verständnis von Containern erlangst, wenn du selbst darauf kommst 😉

    Eventuell nützt es auch, den entsprechenden Buchabschnitt oder notfalls ein Tutorial über STL-Container zu lesen. Sollte vieles klären, du musst ja fürs erste noch nicht in die Details gehen.



  • Vielen Dank 🙂

    Manchmal sieht man den Wald vor lauter Bäumen nicht 😉

    for( uint y = 0; y< vektor[x].size(); y++ )
    

    Du machst das super!
    Hilfe zur Selbsthilfe ist klasse. 🙂


Log in to reply