vector durchlaufen



  • 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.



  • DocShoe schrieb:

    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? Ich gehe im vektor an die stelle (DevPos)*/
      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.

    Die ganze Sache ist abgesegnet und ich habe auch verstanden was ich dort gemacht hab. Also das hat sich grade jemand angeschaut.



  • Dev.at(DevPos)
    

    Wenn das vector::at() ist, dann liefert der Aufruf etwas zurück. Die Rückgabe wird in keinster Weise behandelt, also warum findet der Aufruf überhaupt statt? 😕
    Naja, wenn das schon mindestens zwei Leute gut finden sag ich mal besser nix mehr, wird schon passen...



  • DocShoe schrieb:

    Dev.at(DevPos)
    

    Wenn das vector::at() ist, dann liefert der Aufruf etwas zurück. Die Rückgabe wird in keinster Weise behandelt, also warum findet der Aufruf überhaupt statt? 😕
    Naja, wenn das schon mindestens zwei Leute gut finden sag ich mal besser nix mehr, wird schon passen...

    Qh vielen dank für die Aufklärung.
    Hab mir die Reference noch mal durch gelesen und ja klappt genau so wenn ich es weglasse. Also komplett Quark da. 🤡



  • Enno schrieb:

    ich habe auch verstanden was ich dort gemacht hab.

    Enno schrieb:

    Hab mir die Reference noch mal durch gelesen und ja klappt genau so wenn ich es weglasse. Also komplett Quark da. 🤡

    Was fällt dir auf?



  • pumuckl schrieb:

    Was fällt dir auf?

    Nicht richtig gelesen nicht richtig verstanden.



  • DocShoe schrieb:

    Dev.at(DevPos)
    

    Wenn das vector::at() ist, dann liefert der Aufruf etwas zurück. Die Rückgabe wird in keinster Weise behandelt, also warum findet der Aufruf überhaupt statt? 😕

    Stimmt nicht ganz. At wirft eine Exception wenn der Index out of range ist, also macht es doch was.



  • pyhax schrieb:

    Stimmt nicht ganz. At wirft eine Exception wenn der Index out of range ist, also macht es doch was.

    Da er aber vorher abprüft, ob der Index stimmt, wird diese Exception nie geworfen werden.



  • daddy_felix schrieb:

    pyhax schrieb:

    Stimmt nicht ganz. At wirft eine Exception wenn der Index out of range ist, also macht es doch was.

    Da er aber vorher abprüft, ob der Index stimmt, wird diese Exception nie geworfen werden.

    Jap.


Anmelden zum Antworten