Performancefrage std::list mit objekten
-
Habe eine Objekt mit ner std::list, welche eine megne von objekt enthält, die anzhal dieser objekt sei X.
Wenn ich nun X ändere, sollen die elementeanzhal der liste an X angepasst werden.
Bsp.:
Ausgangswert X= 10, Liste enthält 10 elemente.
X auf 5 setzen , die 5 letzen elemetne der liste werden gelöscht.
X auf 8 setzen , 3 elemente werden an die Liste angefügt!
Was wäre schneller:
die liste komplett löschen und die elemente entprechen X anlegen?
oder liste über iteratoren etc. durchlaufen und verlängern oder verkürzen?
Hoffe ihr wisst wa sich meine
-
std::list::resize
-
wenn es egal ist, was es für elemente sind (also du nich tganz bestimmte löschen möchtest), dann reicht ein:
liste.resize(X);vollkommen
-
wenn aber nun jedes objekt der liste bspw. noch ne varibale nr enthält... die bei jedem push gestetzt weird
List.push_back(new Elememnt(nr));geht das mit resize nich oder?
-
BorisDieKlinge schrieb:
wenn aber nun jedes objekt der liste bspw. noch ne varibale nr enthält... die bei jedem push gestetzt weird
List.push_back(new Elememnt(nr));geht das mit resize nich oder?
Es geht schon deswegen nicht, weil du keine Liste mit Objekten, sondern offenbar eine Liste mit Zeigern auf Objekte hast.
Also pop_back/push_back in einer Schleife, bis die Länge passt.
-
wenn du elemente entprechend der nummer sortierte haben möchtest, dann bietet sich auch ne map an... ansonsten kannst du auch die liste vor dem resize sortieren, aber dann muss gewährleistet sein, dass die nummern fortlafend sind, wenn das ganze bei dir sinn machen möchte. am besten du schreibst was dein eigentliches ziel ist und man kann dir sagen, wie man es am besten angeht

-
Was ist n das für n komisches Problem? Du willst Elemente der Liste löschen oder hinzufügen, indem du ne Zahl änderst? Und zusätzlich noch Werte in den Elementen ändern?
-
Mal ganz abstrakt die problematik:
class Elem{ int iNr; Elem(int i) : iNr(i){} void Set(int i) { iNr = i; }; } class Comb{ int S,E; //Startwert , endwert std:list<Elem> LIST; };WEnn startwert 3 und entwert 10, dann sieben elemente in Liste wo bei das erste elemente die Nr 3 hat etc.
wenn ich nur startwert oder endwert ändere , musst ich die list anpassen..
eigentlich ganz einfach...Die Frage ist nur was perfomancetechnischer schneller ist:
- (A) Alle Elemente löschen und liste neu aufbauen mit neuen Nr
oder
- (B) Liste travetieren, und entspreichende Nr anpassen...aber ich denke das (B) schneller ist... weil ich dann die obejkt nich neu erzeugen muss..