listen programmieren(liste von listen oder liste von listenelementen): glaubensfrage, stilfrage !?
-
hi
es gibts ja im grunde mindestens folgende beiden varianten, um eine liste zu programmieren:
1. jedes element einer liste, ist selbst eine liste der länge 1:
class list { private: T wert; list *next; };
2. jedes element einer liste, ist ein listenelement:
class listenelement { private: T wert; listenelement *next; }; class list { private: listenelement *element; };
T soll jeweils ein beliebiger typ sein (zum beispiel mit templates)
das sind zwei verschiedene versionen, mir perönlich gefällt 1 besser(es ist für mich auch verständlicher) und ich komme auch besser mit klar ... implementierungen von funktionen sind wie ich finde einfacher zu machen
was denkt ihr, was ist besser, warum? vorteile/nachteile der einen und/oder der anderen !?
danke + cu
error
-
Die heutzutage einzig sinnvolle Implementierung nennt sich std::list.
-
ERROR schrieb:
1. jedes element einer liste, ist selbst eine liste der länge 1:
welch ein gewagter gedanke.
2. jedes element einer liste, ist ein listenelement:
viel besser.
erstens hat man leichteres spiel bei manchen zugriffsbeschränkungen,
zweitens soll die liste auch listen-eigenschaften haben können (int size),
viertens ist es so konsistent mit arrays, hashtables und vielen weiteren containern,
drittens kann man besser an der privaten implemetierung der elemente frickeln.das sind zwei verschiedene versionen, mir perönlich gefällt 1 besser(es ist für mich auch verständlicher) und ich komme auch besser mit klar ...
1 ist eigentlich nur dann ganz toll, wenn man die methoden auch rekursiv implementieren will. nur ist das fast immer eine schlechte idee.
-
AberHallo schrieb:
Die heutzutage einzig sinnvolle Implementierung nennt sich std::list.
falsch. intrusive listen sind natürlich auch sinnvoll. da haste nämlich kein new mehr drin. und fachleute haben festgestellt, daß ein new deutlich langsamer ist als kein new. außerdem doppelt verkettet listen als ringe mit und ohne möglichkeit des leer-seins. haste zum beispiel in nem doppelt verketten nich-leeren ring ein if gesehen? ok, frei von if ist auch der ring, der leer sein kann, wenn er als queue dient. und fachleute haben festgestellt, daß ein if deutlich langsamer ist als kein if. queues kann man einfach-verkettet gestalten, auch wenn ich mich an kein lehrbuch erinnern kann, das sowas machte, die nehmen immer doppelt-verkettete und keiner weiß, warum.
std::list ist nur eine der vielen listen, die man braucht, wenn man schnelles c++ schreiben mag. std::list ist allgemein gehalten und nirgends schrecklich schlecht, mehr war nie verlangt.
-
und fachleute haben festgestellt, daß ein new deutlich langsamer ist als kein new
Wenn SAT1 von Kochshow auf Programmiershow umsteigt, bekommst du dait sicher den Job!