vector durchlaufen



  • Enno schrieb:

    Wenn dev kleiner als 0

    dev ist ein vector. Keine Zahl.

    Vector kann genausowenig wie der string in deiner anderen Frage gleich, kleiner oder größer als 0 sein. Tu dir und uns den Gefallen und lies dir im Einsteigerbuch deiner Wahl nochmal den Teil zu Datentypen durch.



  • Enno schrieb:

    Wenn dev kleiner als 0 ist soll er dev von vorne lesen.

    Wie kann ein Vektor kleiner als eine Zahl sein? Meinst du, dass die Länge kleiner als 0 sein soll? Das würde man dev.size() < 0 schreiben, aber das ist Blödsinn, weil eine negative Länge erstens keinen Sinn ergibt und zweitens size hier sowieso einen unsigned-Typ zurückgibt.



  • Bashar schrieb:

    Wie kann ein Vektor kleiner als eine Zahl sein? Meinst du, dass die Länge kleiner als 0 sein soll? Das würde man dev.size() < 0 schreiben, aber das ist Blödsinn, weil eine negative Länge erstens keinen Sinn ergibt und zweitens size hier sowieso einen unsigned-Typ zurückgibt.

    Ich wollte prüfen ob ich am Anfang des vectors bin. D.h. ich könnte das vllcht mit front machen?

    EDIT: Mhm ... mist das dann auch wieder Quark da ich dann niemals bis zum for komme oder?



  • Lies dir bitte erstmal die Grundlagen zum Thema "vector" durch. Bspw. http://www.cplusplus.com/reference/stl/vector/.

    Und komm jetzt bitte nicht wieder mit der Ausrede, du seist auf Arbeit. Wenn du die Zeit hast, stundenlang deine Anfängerprobleme hier im Forum zu diskutieren, hast du auch die Zeit, dir kurz das entsprechende Grundlagenwissen anzueignen. Geht vermutlich sogar wesentlich schneller.

    Sorry, wenn das jetz ein wenig direkt war, aber so langsam gehen mir deine Fragen und Probleme ziemlich auf die Nerven.



  • daddy_felix schrieb:

    Lies dir bitte erstmal die Grundlagen zum Thema "vector" durch. Bspw. http://www.cplusplus.com/reference/stl/vector/.

    Und komm jetzt bitte nicht wieder mit der Ausrede, du seist auf Arbeit. Wenn du die Zeit hast, stundenlang deine Anfängerprobleme hier im Forum zu diskutieren, hast du auch die Zeit, dir kurz das entsprechende Grundlagenwissen anzueignen. Geht vermutlich sogar wesentlich schneller.

    Sorry, wenn das jetz ein wenig direkt war, aber so langsam gehen mir deine Fragen und Probleme ziemlich auf die Nerven.

    Link bin ich schon lange drauf ... und ja see ya!



  • Was soll nextNet genau erreichen? Die Funktion macht so wie du sie konzipiert hast keinen wirklichen Sinn...



  • pumuckl schrieb:

    Was soll nextNet genau erreichen? Die Funktion macht so wie du sie konzipiert hast keinen wirklichen Sinn...

    Ich wollte eine Funktion mit der ich alle werte aus dev ausgeben kann ohne das ich wie hier:

    unsigned int SYSInfo::getBytesr(){ 
      return dev[0].bytes_received;   
    }
    

    die Zahl hinter dev ändern muss.



  • Enno schrieb:

    Ich wollte eine Funktion mit der ich alle werte aus dev ausgeben kann ohne das ich wie hier: [...] die Zahl hinter dev ändern muss.

    "Die Zahl hinter dev" nennt sich Array-Index. Als Index kannst du statt der Konstanten auch eine Variable benutzen (=> Grundlagenbuch), und um die Variable hochzuzählen typischerweise eine Schleife (=> Grundlagenbuch):

    //alle Werte aus dev ausgeben:
    for (unsigned i = 0; i < dev.size(); ++i)
    {
      cout << dev[i] << ' ';
    }
    

    Mal davon abgesehen, dass dein nextNet garnichts ausgibt.



  • pumuckl schrieb:

    Enno schrieb:

    Ich wollte eine Funktion mit der ich alle werte aus dev ausgeben kann ohne das ich wie hier: [...] die Zahl hinter dev ändern muss.

    "Die Zahl hinter dev" nennt sich Array-Index. Als Index kannst du statt der Konstanten auch eine Variable benutzen (=> Grundlagenbuch), und um die Variable hochzuzählen typischerweise eine Schleife (=> Grundlagenbuch):

    //alle Werte aus dev ausgeben:
    for (unsigned i = 0; i < dev.size(); ++i)
    {
      cout << dev[i] << ' ';
    }
    

    Mal davon abgesehen, dass dein nextNet garnichts ausgibt.

    wäre es mal so leicht 😞

    Ich muss auf jedes Element einzelnt mit einer getFunktion zugreifen können meine next Funktion soll nun meinen index ändern. Wahrscheinlich der größte müll den ich mal wieder rede.



  • meinst du sowas:

    for(std::vector<face>::const_iterator it = dev.begin(); it != dev.end(); ++it)
    {
      it->getXYZ();
      it->getName();
    }
    


  • Enno schrieb:

    wäre es mal so leicht 😞

    Das ist das, was du beschrieben hast. Leider wird man aus deinem ersten Post nicht so recht schlau. Was willst du erreichen?

    Ich muss auf jedes Element einzelnt mit einer getFunktion zugreifen können meine next Funktion soll nun meinen index ändern.

    Dann greif doch innerhalb einer Schleife mit dem Getter auf die Elemente zu - den index abzuändern übernimmt der Schleifenkopf doch.



  • pumuckl schrieb:

    //alle Werte aus dev ausgeben:
    for (unsigned i = 0; i < dev.size(); ++i)
    {
      cout << dev[i] << ' ';
    }
    

    Das Problem für mich hier ist, dass die schleife alle teile ausgibt und nicht nur den ersten "block" aus [0](oder halt [1] ...).
    Von der theorie noch mal eben her:
    setFunktion die den gewünschten Index setzt, nextFunktion die in den Index geht und getFunktion die den teil ausgibt.

    Würde das so gehen ?

    daddy_felix schrieb:

    meinst du sowas:

    for(std::vector<face>::const_iterator it = dev.begin(); it != dev.end(); ++it)
    {
      it->getXYZ();
      it->getName();
    }
    

    Wäre das nicht nur eine Schleife die alle getFunktionen bestückt?



  • Enno schrieb:

    Von der theorie noch mal eben her:
    setFunktion die den gewünschten Index setzt, nextFunktion die in den Index geht und getFunktion die den teil ausgibt.

    Würde das so gehen ?

    Du willst doch über alle Elemente laufen? Zumindest hast du das vorhin noch geschrieben. Dann musst du keinen Index setzen.

    daddy_felix schrieb:

    meinst du sowas:

    for(std::vector<face>::const_iterator it = dev.begin(); it != dev.end(); ++it)
    {
      it->getXYZ();
      it->getName();
    }
    

    Wäre das nicht nur eine Schleife die alle getFunktionen bestückt?[/quote]

    das ist ein BEISPIEL. wie du den vector komplett durchläufst. Wenn du nur eine bestimmtes Eigenschft benötigst, dann greifst du eben nur auf diese zu:

    cout << it->getVeryImportantWhatever() << " ";
    


  • daddy_felix schrieb:

    Du willst doch über alle Elemente laufen? Zumindest hast du das vorhin noch geschrieben. Dann musst du keinen Index setzen.

    meinst du sowas:

    for(std::vector<face>::const_iterator it = dev.begin(); it != dev.end(); ++it)
    {
      it->getXYZ();
      it->getName();
    }
    

    Wäre das nicht nur eine Schleife die alle getFunktionen bestückt?[/quote]

    das ist ein BEISPIEL. wie du den vector komplett durchläufst. Wenn du nur ein bestimmtes Elemen benötigst, dann greifst du eben nur auf dieses Element zu:

    cout << it->getVeryImportantElement() << " ";
    

    [/quote]

    Ja weiß ich also "bestückt" die schleife die getVeryImportantElemnt() mit einem wert.

    Einfacher gehtz ja so:

    unsigned int SYSInfo::getFifot(){ 
      return dev[0].fifo_transmitted;   
    }
    

    So bekomm ich die ja nun einzelnt. Ich will nun aber den ganzen "block" von index [n].



  • Enno schrieb:

    Das Problem für mich hier ist, dass die schleife alle teile ausgibt und nicht nur den ersten "block" aus [0](oder halt [1] ...).

    Was verstehst du unter dem ersten Block? Meinst du sowas:

    for( unsigne i = 0; i < dev.size(); ++i)
    {
      cout << dev[i].bytes_received << '\n';
    }
    

    pumuckl schrieb:

    Was willst du erreichen?



  • pumuckl schrieb:

    Enno schrieb:

    Das Problem für mich hier ist, dass die schleife alle teile ausgibt und nicht nur den ersten "block" aus [0](oder halt [1] ...).

    Was verstehst du unter dem ersten Block? Meinst du sowas:

    for( unsigne i = 0; i < dev.size(); ++i)
    {
      cout << dev[i].bytes_received << '\n';
    }
    

    pumuckl schrieb:

    Was willst du erreichen?

    In diesem fall der vector:

    lo:  167027     548    0    0    0     0          0         0   167027     548    0    0    0     0       0          0
     wlan0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
      eth0: 39072289   41342    0    0    0     0          0      3348  4363113   28697    0    0    0     0       0          0
    

    Meine vorstellung von "block" oder auch halt dem index[0] in diesem fall:

    lo:  167027     548    0    0    0     0          0         0   167027     548    0    0    0     0       0          0
    


  • Wir haben dir nun gezeigt, wie du über alle Elemente des vectors iterierst. Innerhalb des Schleifenrumpfes kannst du nun auf eine Instanz von "face" zugreifen. Dort holst du dir die Informationen, die du ausgeben willst, und gibst diese aus. Welche Getter du dafür konkret aufrufen musst, können wir dir nicht sagen.

    Achso, du willst also anscheinend alle Elemente von "face" ausgeben. In diesem Fall machst du entweder

    cout << it->getName() << " " << it->getPacketsReceived() << " " << ...
    

    oder, falls du dir noch mehr fortgeschrittenen Techniken ansehen willst: du kannst den Ausgabeoperator << für deinen Typ "face" überladen (-> Grundlagenbuch).

    dann kannst du das einfach so schreiben:

    cout << *it;
    


  • Enno schrieb:

    In diesem fall der vector:

    lo:  167027     548    0    0    0     0          0         0   167027     548    0    0    0     0       0          0
     wlan0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
      eth0: 39072289   41342    0    0    0     0          0      3348  4363113   28697    0    0    0     0       0          0
    

    Meine vorstellung von "block" oder auch halt dem index[0] in diesem fall:

    lo:  167027     548    0    0    0     0          0         0   167027     548    0    0    0     0       0          0
    

    Du willst also einfach nur den ersten Eintrag im vector ausgeben? Falls nicht, sag uns doch bitte, was du erreichen willst!



  • pumuckl schrieb:

    Du willst also einfach nur den ersten Eintrag im vector ausgeben? Falls nicht, sag uns doch bitte, was du erreichen willst!

    Jain ich will eine Funktion die da durchlaufen kann und den entsprechenden index den ich eingebe dann auch ausgibt. Versteht man das?



  • Enno schrieb:

    Jain ich will eine Funktion die da durchlaufen kann und den entsprechenden index den ich eingebe dann auch ausgibt. Versteht man das?

    Nein. Du willst genau einen Index eingeben und die Werte von dem Element an diesem Index ausgeben?

    void PrintElement(size_t index)
    {
      assert(index < dev.size());
      cout << dev[index].getName() << " " << dev[index].getPacketsLoss() << " " << ...;
    }
    

    so?


Anmelden zum Antworten