prozessdaten zwischenspeichern



  • hi... ich habe eine klasse, in etwa so:
    (private / public tut hier ja nix zur sache, deshalb auch nen struct)

    struct klasse
    {
    
    std::vector <int> beispiel;
    
    std::vector <int>::iterator beispielIterator;
    };
    

    ist der iterator nun gut dort aufgehoben oder ist das eher unsauber, das so zwischenzuspeichern? Ich meine - ich habe sehr viele Funktionen, die diesen vector (oder was auch immer), durchiterieren...

    kurz: ist es sinnvoll, den iterator als member zu deklarieren oder eher nur unsauber? das es performance-mäßig etwas bringt, glaube ich auch eher nicht - aber mir gehts hier erst mal nur um das design an sich ^^

    danke schon mal : )
    bb



  • Speicher den iterator, wenn du ihn brauchst, sonst nicht.



  • ja - das ist auch meine meinung...

    nur war mir eher an argumenten gelegen als an irgend nem satz, wie: "machs so!"...
    also nehmen wir die argumente und lassen die persönliche meinung etwas im hintergrund?!

    bb



  • Ich würde sagen, es kommt auf die Weise an, auf die die Methoden den Iterator benötigen.

    Wenn du den Iterator zwischenspeichern willst, um zu einem beliebigen Zeitpunkt auf das verwiesene Element zuzugreifen, lohnt sich ein Member. Also wenn er eine Funktionalität als Verweis besitzt. Falls du aber sowieso in jeder Methode neu durchiterierst und der Iterator zwischen Methodenaufrufen ungültig bleibt, solltest du diesen auch nur lokal deklarieren.



  • Nein - es ging nicht wirklich um das speichern der Daten - sondern nur um das "Speichern des Speicherbereichs" ^^



  • Ja, das meinte ich eigentlich auch... 😉

    Also brauchst du zwischen Methodenaufrufen den Iterator? Hat er irgendeine Funktion (ausser lokal in den Methoden), soll er z.B. auf ein gültiges Objekt verweisen?



  • Na ja, eine Membervariable beschreibt nunmal den Status eines Objektes. Beschreibt der Iterator also den Status deines Objektes, muss er ein Member sein. Benutzt du ihn nur zum iterieren, muss er keine Member sein, sollte es folglich auch nicht.

    Lokale Iteratoren (und auch Variablen allgemein) eröffnen dem Kompiler oft größere Optimierungsmöglichkeiten, falls es dir, um die Performance geht. Aber das sollte es sowieso nicht. "Premature optimization is the root of all evil" (Donald Knuth).

    Ich verstehe deine Frage gerade nicht so ganz. Fragst du, ob du einen Iterator in einer Klasse speichern sollst, obwohl diese den gar nicht braucht? Dann sollte die Antwort ja klar sein: Nein.

    Gruß
    Don06



  • @Don06: Er fragt *warum* er das nicht tun soll, nicht ob.

    Die beste Antwort die mir dazu einfällt ist aber auch "lass es einfach, weil wir dir sagen dass du es lassen sollst" 🙂



  • Es gilt immer noch: Alles so lokal wie möglich.



  • Jopp - das ist mir ja auch klar... Ich meine - ich bin selbst der Meinung, dass man es nicht macht - aber mir fällt kein wirklicher Grund dafür ein...

    Na gut - einen habe ich doch (also 2 halbe ^^ bzw folgt der eine aus dem anderen)
    - Member sollten den Objekt-Status repräsentieren - und der Iterator gehört nicht dazu
    - eine const Funktion kann den iterator nicht nutzen (aber dafür gibts ja wiederrum mutable ^^)

    Aber auch das befriedigt meinen Diskussions-Partner nicht vollständig ^^

    btw: anscheind ist hustbaer der einzige von euch, der ordentlich lesen kann ><

    Alles so lokal wie möglich.

    würde mir als Grund nicht reichen... ich meine... wo ist der vorteil?

    bb


Anmelden zum Antworten