vector durchlaufen



  • pumuckl schrieb:

    Siehst du - das ist das erste mal, dass du uns den Code gezeigt hast, den du tatsächlich bei dir stehen hast. In den Beispielen von daddy_felix stand nirgendwo ein std:: drin, und wie du siehst war das Absicht.
    Die Doku, die du verlinkt hast, ist zugegebenermaßen etwas irreführend: void assert (int expression); in der ersten Zeile dort ist quatsch. Allerdings steht direkt danach, dass es sich bei assert um ein Makro handelt, nicht um eine echte Funktion, und damit fällt auch std wieder weg 🙂

    Danke für die erklärung. 🙂

    Allerdings muss ich mir nun selber irgendwas noch mal zusammen suchen. Irgendwie brauch ich was anderes was ich wohl nicht beschreiben kann. ^^


  • Mod

    Wenn du es nicht auf Deutsch (welches du recht gut kannst) beschreiben kannst, wie wie willst du es dann selber in C++ (welches du nicht wirklich kannst) beschreiben? Weißt du überhaupt selber, was du willst?

    Ich habe den Verdacht, dass das was du möchtest schon gekommen ist (da so ziemlich alle Varianten hier schon zweimal oder öfters vorgeführt wurden), du es bloß nicht gemerkt hast, da du die Antworten nicht liest/verstehst, sondern auf eine Komplettlösung wartest.



  • SeppJ schrieb:

    Wenn du es nicht auf Deutsch (welches du recht gut kannst Danke.) beschreiben kannst, wie wie willst du es dann selber in C++ (welches du nicht wirklich kannst) beschreiben? Weißt du überhaupt selber, was du willst?

    Ich habe den Verdacht, dass das was du möchtest schon gekommen ist (da so ziemlich alle Varianten hier schon zweimal oder öfters vorgeführt wurden), du es bloß nicht gemerkt hast, da du die Antworten nicht liest/verstehst, sondern auf eine Komplettlösung wartest.

    Ich habe alles hier vorgeschlagene entweder ausprobiert oder verstanden. Ich kann es gerne noch einmal versuchen alles zu erklären, was ihr sicher nicht wollt. 🤡
    Ich hab auch eben hier in der Firma noch einmal nach gefragt was ich genau machen soll.



  • Morgen.
    Also Jungs und vllcht ja auch Mädels.

    Ich hab es nun so:

    bool SYSInfo::nextNet(){
      if(Dev.empty()) return false;
      unsigned int i = 0; 
      if(i <= Dev.size()){ 
        return false;
      }  
      i++
      Dev.at(0);
      return true;
    }
    

    Das funktioniert aber nicht. Ist ja auch logisch da i kleiner ist als die Dev.size(). Nun meine Frage ist: Wie schaffe ich es das ich da keine endlos Schleife baue aber ich trotzdem meine Zahlen abfragen kann aus jedem Index.

    So steht es dann in der main aus:

    while(sys_info.nextNet()==true){
        std::cout << "Bytes received: " << sys_info.getBytesr() << std::endl;
      }
    

    Ich weiß nicht vllcht wird durch den Code klar was ich vorhabe. Es soll mir für jeden Index bytes recivied ausgegeben werd. In diesem Fall ja 3 mal.



  • Anhand deiner Informationen vermute ich, dass du sowas willst:

    for(std::vector<SYSInfo>::const_iterator cit = Dev.begin(); cit != Dev.end(); ++cit)
      std::cout << "Bytes received: " << cit->getBytesr() << std::endl;
    

    Edit: Du solltest wirklich so langsam lernen, wie du mit einer Schleife über einen vector iterierst -> Grundlagenbuch. Wir haben das schon mehrfach in diesem Thread gepostet.



  • daddy_felix schrieb:

    Du solltest wirklich so langsam lernen, wie du mit einer Schleife über einen vector iterierst -> Grundlagenbuch. Wir haben das schon mehrfach in diesem Thread gepostet.

    Nicht nur in diesem ...



  • daddy_felix schrieb:

    Anhand deiner Informationen vermute ich, dass du sowas willst:

    for(std::vector<SYSInfo>::const_iterator cit = Dev.begin(); cit != Dev.end(); ++cit)
      std::cout << "Bytes received: " << cit->getBytesr() << std::endl;
    

    Edit: Du solltest wirklich so langsam lernen, wie du mit einer Schleife über einen vector iterierst -> Grundlagenbuch. Wir haben das schon mehrfach in diesem Thread gepostet.

    Nein.

    Belli schrieb:

    daddy_felix schrieb:

    Du solltest wirklich so langsam lernen, wie du mit einer Schleife über einen vector iterierst -> Grundlagenbuch. Wir haben das schon mehrfach in diesem Thread gepostet.

    Nicht nur in diesem ...

    Ich weiß nicht aber vllcht habt ihr auch nicht verstanden was ich wollte.
    Aber tada so ist fertig:

    bool SYSInfo::nextInterface(){
      if(Dev.empty()) return false;
      if(DevPos >= (Dev.size()-1)){
        return false;
      }
      DevPos++;
      Dev.at(DevPos);
      return true;
    }
    
    do{
        std::cout << "\n" << sys_info.getName() << "\n"
                  << "Bytes received: " << sys_info.getBytesr() << "\n"
                  << "Packets received: " << sys_info.getPacketr() << "\n"
                  << "Errors received: " << sys_info.getErrsr() << "\n"
                  << "Drops received: " << sys_info.getDropr() << "\n"
                  << "Fifos received: " << sys_info.getFifor() << "\n"
                  << "Frames received: " << sys_info.getFramer() << "\n"
                  << "Compressed received: " << sys_info.getCompressedr() << "\n"
                  << "Multicasts received: " << sys_info.getMulticastr() << "\n"
                  << "Bytes transmitted: " << sys_info.getBytest() << "\n"
                  << "Packets transmitted: " << sys_info.getPackett() << "\n"
                  << "Errors transmitted: " << sys_info.getErrst() << "\n"
                  << "Drops transmitted: " << sys_info.getDropt() << "\n"
                  << "Fifos transmitted: " << sys_info.getFifot() << "\n"
                  << "Colls transmitted: " << sys_info.getCollt() << "\n"
                  << "Carriert transmitted: " << sys_info.getCarriert() << "\n"
                  << "Compressed transmitted: " << sys_info.getCompressedt() << '\n';
      }while(sys_info.nextInterface()==true);
    

    Jetzt fehlt mir nur noch eine setFunktion um DevPos setzen zu können. 🤡



  • Herzlichen Glückwunsch. Du hast gerade einen Iterator nachprogrammiert.

    Wir haben nicht verstanden, was du willst? Du hast geschrieben

    Enno schrieb:

    Es soll mir für jeden Index bytes recivied ausgegeben werd.

    Ich gebe dir eine Schleife, die für jeden Index "bytes received" ausgibt. Das ist nun nicht mehr das, was du willst???



  • Ihhh, ein Java-Iterator.



  • daddy_felix schrieb:

    Herzlichen Glückwunsch. Du hast gerade einen Iterator nachprogrammiert.

    Cool.

    daddy_felix schrieb:

    Wir haben nicht verstanden, was du willst? Du hast geschrieben

    Enno schrieb:

    Es soll mir für jeden Index bytes recivied ausgegeben werd.

    Ich gebe dir eine Schleife, die für jeden Index "bytes received" ausgibt. Das ist nun nicht mehr das, was du willst???

    Wie gesagt ich konnte nicht erklären was ich wollte. Das wollte ich, da es meine vorgaben waren es so zu machen. Wo ist dein Problem?



  • Enno schrieb:

    daddy_felix schrieb:

    Herzlichen Glückwunsch. Du hast gerade einen Iterator nachprogrammiert.

    Cool.

    Uncool. Wenn es eine fertige Lösung gibt, sollte man diese verwenden.



  • daddy_felix schrieb:

    Enno schrieb:

    daddy_felix schrieb:

    Herzlichen Glückwunsch. Du hast gerade einen Iterator nachprogrammiert.

    Cool.

    Uncool. Wenn es eine fertige Lösung gibt, sollte man diese verwenden.

    Uncool. Wenn es verlangt wird und man es so machen soll.



  • Enno schrieb:

    Uncool. Wenn es verlangt wird und man es so machen soll.

    Das berühmte "Professoren-Phänomen", kenne ich leider nur allzu gut.

    Leider ging aus deinen Posts nicht wirklich heraus, was genau Vorgabe ist und womit du genau Implementierungsprobleme hast. Wenn du einen vector hast und schreibst, du willst eine Funktion für alle Elemente des vectors aufrufen, dann darfst du dich auch nicht beschweren, wenn ich dir genau das liefere.



  • [quote="Enno"]

    daddy_felix schrieb:

    Enno schrieb:

    daddy_felix schrieb:

    Herzlichen Glückwunsch. Du hast gerade einen Iterator nachprogrammiert.

    Cool.

    Uncool. Wenn es eine fertige Lösung gibt, sollte man diese verwenden.

    😃 Das ist kein Grund. In diesem Fall musst du deinem Betreuer dein Lehrbuch an den Kopf werfen und sagen, Seite X Abschnitt Y. LIES!



  • out schrieb:

    😃 Das ist kein Grund. In diesem Fall musst du deinem Betreuer dein Lehrbuch an den Kopf werfen und sagen, Seite X Abschnitt Y. LIES!

    Wird schwer, wenn man kein Lehrbuch hat bzw. es nicht liest...



  • daddy_felix schrieb:

    Enno schrieb:

    Uncool. Wenn es verlangt wird und man es so machen soll.

    Das berühmte "Professoren-Phänomen", kenne ich leider nur allzu gut.

    Leider ging aus deinen Posts nicht wirklich heraus, was genau Vorgabe ist und womit du genau Implementierungsprobleme hast. Wenn du einen vector hast und schreibst, du willst eine Funktion für alle Elemente des vectors aufrufen, dann darfst du dich auch nicht beschweren, wenn ich dir genau das liefere.

    Ich beschwer mich doch nicht. 😮

    daddy_felix schrieb:

    out schrieb:

    😃 Das ist kein Grund. In diesem Fall musst du deinem Betreuer dein Lehrbuch an den Kopf werfen und sagen, Seite X Abschnitt Y. LIES!

    Wird schwer, wenn man kein Lehrbuch hat bzw. es nicht liest...

    PDF kann man schlecht werfen/schalgen.
    Ist das eigentlich normal das man als Anfänger so hart gedisst wird? 🤡 Ich mein mich stört es nicht ich lern davon. Aber andere könnten schon schnell wieder aufhören. Oder bin ich einfach nur selten dumm?



  • Enno schrieb:

    Ist das eigentlich normal das man als Anfänger so hart gedisst wird? 🤡

    Wenn er so hartnäckig unklare Fragen stellt und scheinbar nicht beherzigt, was an Ratschlägen gegeben wird (Stichwort Grundlagenbuch), dann kann das schonmal vorkommen.



  • pumuckl schrieb:

    Enno schrieb:

    Ist das eigentlich normal das man als Anfänger so hart gedisst wird? 🤡

    Wenn er so hartnäckig unklare Fragen stellt und scheinbar nicht beherzigt, was an Ratschlägen gegeben wird (Stichwort Grundlagenbuch), dann kann das schonmal vorkommen.

    🤡 Ich weiß ja nicht aber ich lese alles. Versuche auch dann drauf einzugehen, wenn ich was nicht verstehe.

    Ist das den nun schlecht oder was ist dadran schlecht was ich geschrieben hab an Code?



  • Enno schrieb:

    Ist das den nun schlecht oder was ist dadran schlecht was ich geschrieben hab an Code?

    Deine Klasse merkt sich die Position einer Iteration über einen ihrer Member. Sie spielt quasi Iterator (so nennt man Klassen, die genau das tun), und hat damit zwei Aufgaben, was an sich schon mal nicht so toll ist.

    Das Problem dabei ist, dass dadurch immer nur eine solche Iteration gleichzeitig ablaufen kann. Mehrere parallele Iterationen über dieselbe Liste werden unmöglich, weil du dir nur eine Position merken kannst.

    Dein Code ist damit sofort weder eintrittsinvariant noch threadsicher. Es ist nicht klar, wieviel davon durch die Aufgabenstellung vorgegeben ist, und es kann durchaus sein, dass dein Code gar nicht eintrittsinvariant oder threadsicher sein muss. Aber es besteht die Gefahr, dass du dir solchen Murks als funktionierendes Lösungskonzept merkst.



  • Dazu kommt noch, dass der Code nicht funktioniert, wenn die Liste leer ist. Die do-while Schleife funktioniert nur dann, wenn mindestens ein Element in der Liste enthalten ist, ansonsten gibt es kein aktuelles Objekt, dessen Attribute ausgegeben werden können.

    Edit:

    bool SYSInfo::nextInterface(){ 
      if(Dev.empty()) return false; 
      if(DevPos >= (Dev.size()-1)){ 
        return false; 
      } 
      DevPos++; 
      Dev.at(DevPos);  // <= Was passiert hier?
      return true; 
    }
    

    Ich habe den Eindruck, du schiebst so lange Codeschnipsel hin- und her, bis hinterher ungefähr das herauskommt, was herauskommen soll. Verstanden hast du aber nichts. Du solltest wirklich (ja, echt!) mal eine Zeit lang an Grundlagen arbeiten, denn ohne Grundlagen wird jedes triviale Problem für dich zu einer Herausforderung.


Anmelden zum Antworten