Implementierung von operator=() mit Deep Copy einer dynamischen Liste
-
Wie man eine ordentliche einfach verkettete Liste implementiert, siehst du hier: http://www.c-plusplus.net/forum/p2156719#2156719
-
Habs jetzt nur mal überflogen, aber dort ist auch kein Kopierkonstruktor drin. Da dürfte es ähnliche Probleme geben, wie bei mir.
Abgesehen davon gehören Listen ja auch zum Lehr-Standard in Schule und Uni, also im Prinzip weiß ich, wie's geht. Probleme machen ja erst die eigenen Spezialitäten.
-
Ist er wohl. Lern lesen.
-
314159265358979 schrieb:
Wie man eine ordentliche einfach verkettete Liste implementiert, siehst du hier: http://www.c-plusplus.net/forum/p2156719#2156719
So toll finde ich die jetzt nicht. Mich stört, dass da immer -- auch bei einer leeren Liste -- zwei T-Objekte erzeugt werden und T dementsprechend default-konstruierbar sein muss.
Vielleicht könnte man das noch mit Vererbung so lösen
struct list_link { list_link* next; explicit list_link(list_link* n = 0) : next(n) {} list_link(list_link const&) = delete; list_link& operator=(list_link const&) = delete; }; template<class T> struct list_node : list_link { T value; list_node* next() const {return static_cast<list_node*>(list_link::next);} void next(list_node* n) {list_link::next = n;} template<class...Args> explicit list_node(list_node* n, Args&&...args) : list_link(n) , value(std::forward<Args>(args)...) {} };und dann liste so aufbauen:
template<class T> class list { list_link before_begin_; list_link *before_end_ptr_; // fuer schnelles push_back public: list() : before_begin_(/* mit next= */ 0) : before_end_ptr_(&before_begin_) {} ... };Die Verkettungsoperationen (Knoten löschen, einfügen, etc) könnte man auch auf Basis von list_link definieren, weil diese Funktionen ja auch nicht von T abhängen. Hier und da müsste man ggf noch static_cast<node<T>*> auf einen next-Zeiger anwenden. Das ist aber IMHO vertretbar; denn in diesem Design würde jeder next-Zeiger garantiert auf ein node<T>-Objekt zeigen (oder 0 sein).
Ach, ist "last" wirklich nötig? Das Ding scheint mir im Moment sehr nutzlos zu sein, zumindest bei einer einfach verkettenen Liste.
Edit: Ok, das weißt Du schon, sehe ich gerade.list_link* remove_link(list_link* predecessor) { list_link* removed = predecessor->next; predecessor->next = removed->next; removed->next = 0; return removed; }oder so...
(alles ungetestet)
Cheers!
kkP.S.: Sei mal nicht so patzig. Der Überlegenheitskomplex steht Dir nicht. :-p

-
Ist lesen denn so schwer? Meine Fresse.
-
314159265358979 schrieb:
Ist lesen denn so schwer? Meine Fresse.
Nö. Habe keine Lust den kompletten Fred zu lesen. Du verlinkst auf Deine Liste. Die habe ich kritisiert. Nichts ist daran verwerflich. Sollte da am Ende des Freds noch eine andere bessere Implementierung stehen, hättest Du die ja verlinken können...
Falls ich mich jetzt zu unrecht angesprochen gefühlt habe: Ja, den Kopierkonstruktor kann man schonmal übersehen -- gerade dann, wenn er nicht auf dieser Seite sondern auf einer der folgenden kommt. Das ist kein Grund so pampig zu werden, meiner Meiung nach.
-
Wenn 2 Leute hintereinander ganz offensichtlich nicht lesen können...
-
314159265358979 schrieb:
Wenn 2 Leute hintereinander ganz offensichtlich nicht lesen können...
Und wenn du nur einen funken intelligenz hättest...
-
314159265358979 schrieb:
Wenn 2 Leute hintereinander ganz offensichtlich nicht lesen können...
Du trollst doch nur rum, gerade. Das ist mir jetzt nicht mehr als 2 Sätze wert.
-
Bin ich der einzige, den ein (temporärer) pi-Bann nicht stören würde?
-
DocShoe schrieb:
Bin ich der einzige, den ein (temporärer) pi-Bann nicht stören würde?
Gabs schon, hat offenbar nicht viel bewirkt. Werden es aber weiterhin im Auge behalten. Bitte zurück zum Thema und bitte auf den Ton achten, und zwar alle.
-
krümelkacker schrieb:
Nö. Habe keine Lust den kompletten Fred zu lesen.
Es hätte gereicht, wenn du den kompletten Post gelesen hättest. Dann wüsstest du nämlich, dass es eine Fortsetzung gibt.
krümelkacker schrieb:
Sollte da am Ende des Freds noch eine andere bessere Implementierung stehen, hättest Du die ja verlinken können...
Willst du ernsthaft, dass ich mir dir Arbeit mache, dir 7 oder 8 Posts zu verlinken? Du kannst selbst umblättern, habe ich gehofft. Sorry, wenn ich damit zu viel von dir verlange.
krümelkacker schrieb:
Das ist kein Grund so pampig zu werden, meiner Meiung nach.
Ich sag dir, warum ich so pampig bin. Es geht mir fürchterlich auf die Eier, dass jedes mal, wenn ich irgendwas poste, egal was, irgendetwas kritisiert wird. Noch dazu diesmal zu Unrecht. Ich habe es so verdammt satt. Jedes verdammte Mal.
Shade Of Mine schrieb:
Und wenn du nur einen funken intelligenz hättest...
Wenn du nur ein bisschen Ahnung vom moderieren hättest...
DocShoe schrieb:
Bin ich der einzige, den ein (temporärer) pi-Bann nicht stören würde?
Gute Idee, wäre ich auch dafür. Am besten gleich perma.
pumuckl schrieb:
bitte auf den Ton achten, und zwar alle.
War das nett genug?
-
Ok, um das Thema abzukürzen:
1. Lesen kann ich tatsächlich schlecht - aber bei mir war ja auch zu lesen, dass ich es nur überflogen hab.
2. Das Thema hab ich für mich mit QList gelöst, weil auch mein Wochenende nur begrenzt ist. Sollte ich mal in Versuchung kommen, doch eine Liste selbst zu schreiben, werd ich mir den Beitrag gründlichst durchlesen.Danke, bitte schließen.
-
314159265358979 schrieb:
Ich sag dir, warum ich so pampig bin. Es geht mir fürchterlich auf die Eier, dass jedes mal, wenn ich irgendwas poste, egal was, irgendetwas kritisiert wird. Noch dazu diesmal zu Unrecht. Ich habe es so verdammt satt. Jedes verdammte Mal.
Ok, dann hör aber auch auf, dasselbe mit Hilfesuchenden zu tun. Antworten im Stil von "der Fehler ist die Verwendung von VCL" sind pure Trollerei, bringen niemandem was, und steigern deine Unbeliebtheit.
-
314159265358979 schrieb:
pumuckl schrieb:
bitte auf den Ton achten, und zwar alle.
War das nett genug?
Gemessen am Ton vorher allemal - meiner Meinung nach. Muss aber jeder für sich beantworten, vor allem der Adressat.
314159265358979 schrieb:
Ich sag dir, warum ich so pampig bin. Es geht mir fürchterlich auf die Eier, dass jedes mal, wenn ich irgendwas poste, egal was, irgendetwas kritisiert wird. Noch dazu diesmal zu Unrecht. Ich habe es so verdammt satt. Jedes verdammte Mal.
Henne-Ei-Problem: Was kam zuerst, dein pampiger Ton oder dass dich viele hier auf dem Kieker haben? Und was davon ist leichter zu beheben? Erfahrungsgemäß regt sich die Allgemeinheit hier genauso schnell wieder ab, wie sie sich aufgeregt hat. Gib ihr Gelegenheit dazu und alles ist wieder in Butter.
Soviel von mir zu dem Thema, mehr werd ich hier nicht schreiben. Denk in Ruhe drüber nach, bitte. Da hier nicht der Platz ist, das auszudiskutieren, und da es vermutlich auch nicht viel Sinn macht da groß drüber zu diskutieren, mach ich den Thread zu. Bei Bedarf bin ich per PN erreichbar (Mail-Funktion im Profil)
ZU.