Seite 1 von 1

QMutableListIterator vs. for mit Referenz

Verfasst: 15. Juli 2018 13:18
von carre
Hi,

ich habe eine QList<struct> wo ich Werte innerhalb der Struct (bei allen QList Elementen) ändern möchte.

Lösung 1:

Code: Alles auswählen

  for (model_def_struct & model_entry : model_data.model_definition)
  {
     model_entry.model_found_count = 0;
  }
 
Lösung 2 (via Iterator):

Code: Alles auswählen

  QMutableListIterator<model_def_struct> model_entry(model_data.model_definition);
  while (model_entry.hasNext()) {
     model_entry.next().model_found_count = 0;
  }
Meine Frage wäre einfach - spricht etwas gegen Lösung 1 bzw. gibt es irgendwas warum man eher Lösung 2 nehmen soll?
Oder ist es eine reine Geschmackssache?

Danke und Gruß
Thomas

Re: QMutableListIterator vs. for mit Referenz

Verfasst: 16. Juli 2018 20:11
von hilefoks
ja, im Fall von Qt kann das einen bedeutenden Unterschied machen. Dazu muss man verstehen, das Qt Container implicit shared sind. Die C++11 for-each Schleife verwendet einen nicht konstanten Iterator. Damit kann ein Qt Container praktisch gezwungen sein eine Kopie von sich selbst zu erzeugen auf der dann gearbeitet wird. Hält der Container nicht gerade Pointer (oder vergleichbares), dann änderst du aber nur eine Kopie, nicht das Original.